2012-07-16 32 views
2

我試圖實現一個類似於MinimalisticText功能的應用程序,它可以在單擊一個小部件時啓動特定的活動。我正在製作一個應用程序,可以在設備上選擇任何應用程序,然後從中選擇任何應用程序並按下按鈕啓動它。不過,我已經找到了一個ActivityNotFoundException的路由塊,因爲沒有在我的清單中聲明所述的活動。Android - 啓動沒有清單聲明的活動

我的所有研究都表明這是不可能的;然而,Minimalistic Text等應用程序在某種程度上能夠實現該功能。什麼是我從我的應用程序缺少能夠啓動意圖:

下面是我如何啓動活動相關的代碼片段:

 private Intent getLaunchIntent(ActivityInfo ainfo) { 
     Intent launch = new Intent(ctx, ainfo.getClass()); 
     launch.addCategory(Intent.CATEGORY_LAUNCHER); 
     if(DBG) { Log.i(TAG, "Got launch intent:" + launch.toString()); } 

     return launch; 
    } 

編輯:解決了!對於任何人只要看到怎麼辦我在做什麼,請看這裏:

Open another application from your own (intent)

+0

我認爲CTX的問題是你的上下文嗎?如果是的話,你試圖從你的上下文中獲取包信息,而不是相關活動的包信息。也ainfo.getClass()將返回ActivityInfo.class – JRaymond 2012-07-16 15:29:02

+0

好吧,所以這兩個都是一個問題。我將嘗試使用PackageInfo來獲取該包自己的上下文以及該活動自己的類來構造該意圖。 – alextoombs 2012-07-16 17:31:49

回答

0
從清單角度其重要

特別要注意,只是因爲你有活動不一定意味着你實際上可以輸入該特定活動。這些細節由MAINLauncher Intent的意圖過濾器定義,其中一些活動將會或不會有。

需要注意的一件事是,如果某個活動沒有MAIN,則不能通過該包之外的意向直接轉到該活動。被拒絕訪問此活動按預期工作,因爲它是一種安全措施,可防止在設計方案之外訪問特定屏幕。

有關詳情請參閱:http://developer.android.com/reference/android/content/Intent

另外,作爲一個提示可以使用利用PackageManager解決您直接從其他應用程序啓動應用程序(內邊界上面提到的)

+0

嗯,好的。沒有意識到這是按預期工作的。至於getLaunchIntentForPackage()的API,我嘗試過使用它,但我更多地嘗試打開單獨的活動,而不是打開包的MAIN活動。這可能是不可能的,但感謝你的迴應。 – alextoombs 2012-07-16 17:31:03