3

在我的Application级别上,我收到null for getExtras(),但在Activity级别上我可以正确看到它们。

public class MyApplication extends Application 
{
    @Override
    public void onCreate() {
        super.onCreate();
        Intent intent = getPackageManager().getLaunchIntentForPackage("com.example.MyApp");
        if (intent != null){
            String mStaticWorldUrl = intent.getStringExtra("arg1Name");
            String mStaticWorldIconUrl = intent.getStringExtra("arg2Name");
            Log.i("LOG", mStaticWorldUrl + " ---  " + mStaticWorldIconUrl);
        }
    }
}

我从这段代码创建的一些快捷方式调用应用程序:
(-每个快捷方式都有不同Extras的发送到Intent

    // create a shortcut for the specific app
public static void createShortcutForPackage(Context context,
        String packageName, String className, String shortcutName,
        String arg1Name, String arg1Val, String arg2Name, String arg2Val,
        int iconID) {

    Intent intent = new Intent();
    intent.setComponent(new ComponentName(packageName, className));

    PackageManager pm = context.getPackageManager();

    Context pkgContext = createPackageContext(context, packageName);
    if (pkgContext == null)
        return;

    Intent shortcut = new Intent("com.android.launcher.action.INSTALL_SHORTCUT");
    Intent shortcutIntent = pm.getLaunchIntentForPackage(packageName);

    if (arg1Name != null)
        shortcutIntent.putExtra(arg1Name, arg1Val);

    if (arg2Name != null)
        shortcutIntent.putExtra(arg2Name, arg2Val);

    shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
    shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, shortcutName);
    shortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,Intent.ShortcutIconResource.fromContext(context, iconID));
    shortcut.putExtra("duplicate", false);
    context.sendBroadcast(shortcut);
}  

我怎样才能ExtrasApplication水平上阅读这些?
还是有任何其他方法可以为应用程序创建不同的快捷方式并读取其“参数”数据Application

4

2 回答 2

4

该类Application对于应用程序是静态的:对于您的应用程序的进程,它只有一个实例。如果您的应用程序是通过正常启动Intent而不是您创建的快捷方式启动的,则不会出现额外内容。按下 HOME 或 BACK 时,应用程序进程不会死机,因此Intent用于启动包的 可能不是您认为的那样。

您不需要查看Intent级别ApplicationIntent对象不打算在那里“发送”,而是发送到Activity,ServiceBroadcastReceiver.

于 2016-08-01T11:29:56.017 回答
1

这是使用 getExtra 获取应用程序类中的数据的概念错误,这是 Intent 的方法

这个问题的原因:

  • 没有额外内容是因为查询的意图是前一行生成的,它是操作系统按照以下代码中的要求为包生成的意图: Intent intent = getPackageManager().getLaunchIntentForPackage("com.example.M‌ ​yApp");

  • Application 类实例中的 Intent 对象:它们不在
    那里交付

当任何人都想在应用程序级别获取数据时,让我们了解以下要在未来使用中使用的东西

  • 什么是意图?
  • 意图的用途是什么?
  • 我们还可以使用哪些其他方法来实现这一目标?

什么是意图?

  • Intent 提供了一种在不同应用程序中的代码之间执行后期运行时绑定的工具。它最重要的用途是在活动的启动中,它可以被认为是活动之间的粘合剂。它基本上是一种被动数据结构,包含对要执行的操作的抽象描述。

  • extras - 这是任何附加信息的捆绑包。这可用于向组件提供扩展信息。例如,如果我们有一个发送电子邮件消息的操作,我们还可以在此处包含额外的数据以提供主题、正文等。

意图的用途是什么?

使用意图以多种方式促进组件之间的通信,以下是标准使用

  • 开始一项活动。
  • 启动服务。
  • 传送广播

我们还可以使用哪些其他方法来实现这一目标?

  • 我们可以使用很多东西来实现这一目标并解决这个问题。

  • 但是现在我在这里只提到了一个标准且安全的应用程序

  • 内容提供者:将您的应用程序中的文件提供给另一个应用程序就是向接收应用程序发送文件的内容 URI,并授予对该 URI 的临时访问权限。具有临时 URI 访问权限的内容 URI 是安全的,因为它们仅适用于接收 URI 的应用程序,并且它们会自动过期。

于 2016-08-20T12:42:32.213 回答