getExtras()在应用程序级别返回null(-class)

时间:2016-08-01 10:09:55

标签: android android-intent android-activity android-package-managers android-application-class

Application级别,我收到getExtras() null ,但在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);
}  

如何在Extras级别阅读这些Application
或者是否有其他方法可以为应用程序创建不同的快捷方式并阅读其中的#39; "参数" Application上的数据?

2 个答案:

答案 0 :(得分:4)

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

您不需要查看Intent级别的ApplicationIntent个对象无意发送"在那里,而是ActivityServiceBroadcastReceiver

答案 1 :(得分:1)

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

此问题的原因:

  • 没有额外内容是因为查询的意图是生成的意图 前面一行,它是操作系统为此生成的意图 按以下代码中的请求打包:Intent intent = 。getPackageManager()getLaunchIntentForPackage( “com.example.M YAPP”);

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

让我们了解在即将到来的用法中使用的内容,而有人希望在应用程序级别获取数据

  • 什么是意图?
  • 意图的用途是什么?
  • 我们可以用什么其他东西来实现这个目标?

什么是意图?

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

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

Intent的用途是什么?

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

  • 开始活动。
  • 开始服务。
  • 发送广播

我们可以用什么其他方法来实现这一目标?

  • 我们可以用很多东西来解决这个问题并解决这个问题 问题。

  • 但是现在我在这里只提到一个标准和安全的 使用申请

  • 内容提供商:要将应用中的文件提供给其他应用,请执行以下操作: 向接收应用程序发送文件的内容URI并授予临时权限 访问该URI的权限。具有临时URI的内容URI 访问权限是安全的,因为它们仅适用于该应用程序 接收URI,它们会自动过期。