2013-03-20 130 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