2014-01-14 27 views
0

我有我想從另一個打開的應用程序。這是我以前開發的應用程序,但Android的似乎無法找到它:爲什麼我無法從設備上的應用程序中找到活動?

Intent intent = new Intent("org.example.android.ExampleActivity"); 
    PackageManager packageManager =getActivity().getPackageManager(); 
    List<ResolveInfo> activities = packageManager.queryIntentActivities(intent, 0); 
    boolean isIntentSafe = activities.size() > 0; 

isIntentSafe始終是假的,我直接從Android的文檔複製該代碼。

+0

使用ComponentName同時包名和活動名稱 – njzk2

+0

這似乎工作。 – user2863638

回答

1

當你這樣做:

Intent intent = new Intent("org.example.android.ExampleActivity"); 
PackageManager packageManager =getActivity().getPackageManager(); 
List<ResolveInfo> activities = packageManager.queryIntentActivities(intent, 0); 

你問的PackageManager地發現,有一個意圖過濾器,看起來像這樣的Activity

 <intent-filter> 
      <action android:name="org.example.android.ExampleActivity"/> 
     </intent-filter> 

這可能不是你所預期的和是它返回一個空列表的原因。

當您使用帶有單個參數的構造函數創建Intent時,該參數被解釋爲ACTION,而不是類名。

如果你正在尋找一個特定的活動,你應該使用明確意圖解決這樣的:

Intent intent = new Intent(); 
intent.setClassName ("org.example.android", "org.example.android.ExampleActivity"); 
PackageManager packageManager =getActivity().getPackageManager(); 
List<ResolveInfo> activities = packageManager.queryIntentActivities(intent, 0); 

在這種情況下,您創建一個空Intent,然後使用一個明確的包名設置的類名和班級名稱。

相關問題