如何识别用户来自 laucher 还是来自我的 Android 应用程序的快捷方式?

How to identify that a user came from laucher or from shortcut of my Android App?

我正在开发一个 android 应用程序,我从 HomeActivity 创建一个快捷方式,然后从该快捷方式返回到 HomeActivity

我的问题是我想在快捷方式中发送一些 url 并希望在用户从快捷方式到达 HomeAtivity.

时取回 url

代码如下:

主页活动

private void addShortcut() {

    Intent shortcutIntent = new Intent(getApplicationContext(),HomeActivity.class);
    shortcutIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
    shortcutIntent.putExtra("shortcutKey", "www.myapi.com/fromshortcut");
    shortcutIntent.setAction(Intent.ACTION_MAIN);

    Intent addIntent = new Intent();
    addIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
    addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, AppConstants.shortcutTitle);
    addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,
            Intent.ShortcutIconResource.fromContext(getApplicationContext(),R.drawable.ic_launcher));
    addIntent.putExtra("duplicate", false);
    addIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");

    getApplicationContext().sendBroadcast(addIntent);

    Toast.makeText(getApplicationContext(), AppConstants.shortcutDone, 40).show();

快捷方式创建成功。 现在我单击快捷方式并返回 HomeActivity 并获得 Intent 但出现空指针异常...

String  shortcutUrl = getIntent().getStringExtra("shortcutKey");

    if(shortcutUrl.equals("")){

        setupWebView("http://whosebug.com");

    }
    else{

        Log.e("shortcut was created", "url from shortcut");
        setupWebView(shortcutUrl);

    }

那么我应该怎么做才能提前获得数据 back.Thanks 并准备投票选出正确答案。

如果我没听错,你希望 url 作为数据从你的快捷方式返回你的家 Activity 如果是,那么开始你的 Activity 以使用方法 startActivityForResult().

低于回调 url 将返回结果 Intent

protected void onActivityResult(int requestCode, int resultCode, Intent data)          {

}

首先,当您在主屏幕上单击以启动您的应用程序时 android 使用默认的简单 Intent 打开您的应用程序 String 格式

Intent { act=android.intent.action.MAIN 
    cat=[android.intent.category.LAUNCHER] - } // the "-" represent flags

这个 Intent 没有 BundleKey shortcutKey 这就是为什么你有 NPE

你的标题问题和解释让我左右摇摆

试试这些

1:获取 Activity 的 Intent 并通过 putExtras() 和 reCreate() 将你的 url 放入其中 Activity.

getIntent().putExtra("key", "my url");
this.startActivity(getIntent());
this.finish(); // or instead of calling the last two do Activity.recreate()

这里的问题在你的 onCreate() 你检查 Intent.hasExtras(); 如果为真那么你有你的 url 这意味着它已经被导航到它,如果不是你没有你的url,这意味着你通过快捷方式进入,所以你执行逻辑(也就是说,如果你的 HomeActivity 上没有 singleInstance

2:或者如果您在 Activity 上设置了 singleInstance,那么您可以使用 Flag 检查这个 post,尤其是问题 - 将指导您如何使用 Flags.

检查

希望所有这些都是清晰且有用的