0

似乎有兩個問題,我遇到了問題。第一種情況是,當我啓動時鐘應用程序並完美工作時,這似乎是我推出大多數應用程序時的情況。啓動某些android應用程序的意圖導致IllegalStateException

第二種情況是當我嘗試啓動諸如電話活動之類的活動時。當我去獲取Intent時,getLaunchIntentForPackage(app.pname)返回null。有沒有不同的方式來獲得電話活動的意圖,以便我可以在這種情況下啓動它?

第三種情況是當我去啓動諸如Camera活動的活動時。看起來我必須讓我的androidManifest.xml文件中已經有Camera活動來啓動它,但還有其他方法可以解決這個問題嗎?我的應用程序具有可以從其UI中啓動任何應用程序的能力,因此我無法將Android設備的每一項活動事先添加到我的清單文件中。謝謝!

的Java:

 Intent launchApp = getPackageManager().getLaunchIntentForPackage(app.pname); 

      System.out.println(Intent of " + appName + ": + " " +launchApp); 

      if(launchApp!=null){ 
       System.out.println("Permission granted to launch " + appName); 
       startActivity(launchApp); 
      } 

      else{ 

       System.out.println("Permission not granted to launch " + appName); 
      } 

的logcat:

 08-07 09:38:57.031: I/System.out(1056): Intent of Clock: Intent { act=android.intent.action.MAIN flg=0x10000000 cmp=com.htc.android.worldclock/.WorldClockTabControl } 
     08-07 09:38:57.041: I/System.out(1056): Permission granted to launch Clock 
     08-07 09:38:59.783: I/System.out(1056): Intent of Phone: null 
     08-07 09:38:59.783: I/System.out(1056): Permission not granted to launch Phone 
     08-07 09:39:10.564: I/System.out(1056): Intent of Camera: Intent { act=android.intent.action.MAIN flg=0x10000000 cmp=com.android.camera/com.android.internal.app.ResolverActivity } 
     08-07 09:39:10.574: I/System.out(1056): Permission granted to launch Camera 
     08-07 09:39:10.574: D/AndroidRuntime(1056): Shutting down VM 
     08-07 09:39:10.574: W/dalvikvm(1056): threadid=1: thread exiting with uncaught exception (group=0x4001d5a0) 
     08-07 09:39:10.614: E/AndroidRuntime(1056): FATAL EXCEPTION: main 
     08-07 09:39:10.614: E/AndroidRuntime(1056): java.lang.IllegalStateException: Could not execute method of the activity 
     08-07 09:39:10.614: E/AndroidRuntime(1056):  at android.view.View$1.onClick(View.java:2191) 
     08-07 09:39:10.614: E/AndroidRuntime(1056):  at android.view.View.performClick(View.java:2532) 
     08-07 09:39:10.614: E/AndroidRuntime(1056):  at android.view.View$PerformClick.run(View.java:9293) 
     08-07 09:39:10.614: E/AndroidRuntime(1056):  at android.os.Handler.handleCallback(Handler.java:587) 
     08-07 09:39:10.614: E/AndroidRuntime(1056):  at android.os.Handler.dispatchMessage(Handler.java:92) 
     08-07 09:39:10.614: E/AndroidRuntime(1056):  at android.os.Looper.loop(Looper.java:150) 
     08-07 09:39:10.614: E/AndroidRuntime(1056):  at android.app.ActivityThread.main(ActivityThread.java:4306) 
     08-07 09:39:10.614: E/AndroidRuntime(1056):  at java.lang.reflect.Method.invokeNative(Native Method) 
     08-07 09:39:10.614: E/AndroidRuntime(1056):  at java.lang.reflect.Method.invoke(Method.java:507) 
     08-07 09:39:10.614: E/AndroidRuntime(1056):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
     08-07 09:39:10.614: E/AndroidRuntime(1056):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
     08-07 09:39:10.614: E/AndroidRuntime(1056):  at dalvik.system.NativeStart.main(Native Method) 
     08-07 09:39:10.614: E/AndroidRuntime(1056): Caused by: java.lang.reflect.InvocationTargetException 
     08-07 09:39:10.614: E/AndroidRuntime(1056):  at   java.lang.reflect.Method.invokeNative(Native Method) 
     08-07 09:39:10.614: E/AndroidRuntime(1056):  at java.lang.reflect.Method.invoke(Method.java:507) 
     08-07 09:39:10.614: E/AndroidRuntime(1056):  at android.view.View$1.onClick(View.java:2186) 
     08-07 09:39:10.614: E/AndroidRuntime(1056):  ... 11 more 
     08-07 09:39:10.614: E/AndroidRuntime(1056): Caused by: android.content.ActivityNotFoundException: Unable to find explicit activity class {com.android.camera/com.android.internal.app.ResolverActivity}; have you declared this activity in your AndroidManifest.xml? 
     08-07 09:39:10.614: E/AndroidRuntime(1056):  at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1565) 
     08-07 09:39:10.614: E/AndroidRuntime(1056):  at android.app.Instrumentation.execStartActivity(Instrumentation.java:1539) 
     08-07 09:39:10.614: E/AndroidRuntime(1056):  at android.app.Activity.startActivityForResult(Activity.java:2919) 
     08-07 09:39:10.614: E/AndroidRuntime(1056):  at android.app.Activity.startActivity(Activity.java:3025) 
     08-07 09:39:10.614: E/AndroidRuntime(1056):  at com.worklight.androidnativeapp.AndroidNativeApp.appClicked(AndroidNativeApp.java:284) 
     08-07 09:39:10.614: E/AndroidRuntime(1056):  ... 14 more 

回答

1

How to launch the camera

How to launch the dialer

啓動你需要知道包名的特定應用程序和類名

try{ 
    Intent i = new Intent(); 
    i.setClassName("com.example.app", "com.example.app.MainActivity"); 
    i.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
    startActivity(e); 
}catch(ActivityNotFoundException e){ 
    e.printStackTrace(); 
} 
+0

是否有辦法僅通過使用應用程序名稱或程序包名稱來啓動活動?還是必須在所有特殊情況下(如相機和撥號程序)進行硬編碼? – JSchif11

+0

爲什麼你需要通過應用程序名稱來啓動它們,這通常是一個壞主意 – tyczj

+0

我正在製作一個「收藏夾」應用程序,作爲我的實際應用程序的一個引導。用戶在他們最喜歡的屏幕上選擇一組他們想要的應用程序,然後當他們進入喜歡的屏幕時,他們可以按下他們想要啓動的應用程序的圖標。它的bascially一個榮耀的文件夾。我有每個應用程序的名稱,軟件包名稱和圖標存儲。我一直在使用packageName來啓動上面的應用程序。有沒有更好的方式來啓動應用程序,包括特殊情況,如相機應用程序或電話應用程序? – JSchif11

相關問題