2013-03-20 135 views
2

我想这样做的是以下几点:选择和启动快捷方式

  1. 用户从系统中的所有可用快捷键列表的快捷方式;
  2. 存储相关信息;
  3. 用户执行操作并执行选定的快捷方式,就像它是主屏幕上的图标一样。

到目前为止我能填充并展示所有的快捷键列表,使用 getPackageManager().queryIntentActivities(new Intent(Intent.ACTION_CREATE_SHORTCUT), 0);。在选择快捷方式后,我启动了ACTION_CREATE_SHORTCUT意图自定义快捷方式参数 - 它提供了正确的用户界面,似乎工作。我使用此代码启动意图:

ActivityInfo activity = resolveInfo.activityInfo; 
ComponentName name = new ComponentName(activity.applicationInfo.packageName, activity.name); 
Intent i = new Intent(Intent.ACTION_CREATE_SHORTCUT); 
i.addCategory(Intent.CATEGORY_DEFAULT); 
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); 
i.setComponent(name); 
startActivityForResult(i, 1); 

这里是我的onActivityResult:

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

     if (requestCode==1 && resultCode == RESULT_OK) { 
      try { 
       startActivity((Intent) data.getExtras().get(Intent.EXTRA_SHORTCUT_INTENT)); 
      } catch (Exception e) {    
       e.printStackTrace(); 
      } 
      Toast.makeText(getApplicationContext(), "Success!!", Toast.LENGTH_LONG).show(); 
      finish(); 
     }else{ 
      Toast.makeText(getApplicationContext(), "Fail: "+resultCode+" "+resultCode, Toast.LENGTH_LONG).show(); 
     } 
     super.onActivityResult(requestCode, resultCode, data); 
    } 

现在的问题是,onActivityResult总是被startActivityForResult后立即触发与requestCode = 0,发送resultCode = 0并没有数据。当ACTION_CREATE_SHORTCUT活动实际结束时它不会触发。我真的不明白。我认为活动结束后,它应该返回我发送它的requestCode和数据意图,包含Intent.EXTRA_SHORTCUT_INTENT,然后我可以使用以某种方式实际启动快捷方式。

问题的第二部分是如何实际存储用户选择的快捷方式的必要信息,最好在SharedPreferences中,以便稍后可以使用特定参数执行此快捷方式。我找不到任何这样的例子。

任何帮助将不胜感激!谢谢!

回答

2

超过2年后的今天,这里是回答我的问题:

startActivityForResult/onActivityResult系统的正常运作显然取决于主叫和被叫活动均为一部分相同的任务。因此,任何将导致两个活动在单独的任务中启动的操作将会破坏此功能。此类行为包括为AndroidManifest.xml中的任何活动设置任何专属launchMode,或者在启动任何两项活动时使用诸如Intent.FLAG_ACTIVITY_NEW_TASK之类的标志。

Upvoted user2427931对Intent.parseUri()解决方案的回答。

+0

我有同样的问题,你能否用你发现解决你的问题的代码更新你的问题? – Sasa 2015-05-17 11:50:14

2

当我的调用活动launchMode =“singleInstance”时,我的行为相同。你是否也有这个定义?

关于保存意图。您可以将意图转换为URI并将其保存为SharedPreferences中的字符串。一旦你找回它,你就可以使用Intent.pareseUri()。

// Erty