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

时间:2015-05-07 12:21:16

标签: android android-intent shortcut android-pendingintent android-broadcast

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

我的问题是我想在快捷方式中发送一些网址,并希望在用户来自HomeAtivity的快捷方式时返回该网址。

这是代码:

HomeActivity

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://stackoverflow.com");

    }
    else{

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

    }

那么我应该怎样做才能获得这些数据。提前谢谢并准备投票给正确答案。

2 个答案:

答案 0 :(得分:0)

如果我说得对,如果是的话,您希望将网址作为数据从您的快捷方式返回到您的主页Activity,然后使用方法Activity开始startActivityForResult()获取结果。

以下回调网址会以Intent的形式返回结果。

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

}

答案 1 :(得分:0)

首先,当您通过点击主屏幕启动您的应用时,Android会以Intent格式

打开您的应用,使用默认的简单String
Intent { act=android.intent.action.MAIN 
    cat=[android.intent.category.LAUNCHER] - } // the "-" represent flags

Intent没有Bundle Key shortcutKey这就是您拥有NPE

的原因

你的标题问题和解释让我向左倾斜&对

试试这些

1:获取Activity的意图并通过putExtras()将您的网址添加到其中并重新创建()Activity

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

此处的问题在onCreate()您检查Intent.hasExtras();是否为真,那么您有自己的网址,这意味着它已被导航到它,如果不是你没有你的网址,这意味着你在通过快捷方式让您执行逻辑(即如果您singleInstance上没有HomeActivity

2:或者如果您singleInstance上设置了Activity,那么您可以使用Flag检查此post,尤其是问题 - 将指导您如何使用Flag s进行检查。

希望所有这些都是清醒和乐于助人的