2012-12-28 88 views
1

我現在正在編寫我自己的android-發射器,它似乎到目前爲止工作得很好。 我可以啓動除相機以外的所有應用程序。無法啓動相機getLaunchIntentForPackage()

我創建一個新的意圖:

Intent intent = context.getPackageManager().getLaunchIntentForPackage("com.android.camera"); 

而且目的不是null。 但是,當我開始

context.startActivity(intent) 

我的應用程序崩潰的意圖。 logcat的:

12-28 17:18:43.711: I/Launch(4166): Intent { act=android.intent.action.MAIN flg=0x10000000 cmp=com.android.camera/com.android.internal.app.ResolverActivity } 
12-28 17:18:43.711: D/AndroidRuntime(4166): Shutting down VM 
12-28 17:18:43.711: W/dalvikvm(4166): threadid=1: thread exiting with uncaught exception (group=0x4001d5a0) 
12-28 17:18:43.731: E/AndroidRuntime(4166): FATAL EXCEPTION: main 
12-28 17:18:43.731: E/AndroidRuntime(4166): 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? 

我知道我可以使用

Intent intent = new Intent(); 
intent.setCompomponent(new ComponentName(args)); 

但我不知道哪些參數,我可以用它來啓動不同的應用程序。

解決方案應該適用於每個包名稱,而不是使用特殊的cameraIntent。

希望任何人都可以幫忙!

回答

0

我得到它的工作我自己。我所做的就是在GO桌面EX中點擊相機圖標的同時觀看LogCat。在日誌中,我發現這條線:

12-30 17:38:19.098: I/ActivityManager(1375): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.android.camera/.CameraEntry bnds=[300,710][372,800] } from pid 11644 

,我把那爲目的,使用if-塊周圍和一些改掉和漁獲:

String packageName = "com.android.camera"; //Or whatever package should be launched 

if(packageName.equals("com.android.camera")){ //Camera 
    try{ 
     Intent intent = getPackageManager().getLaunchIntentForPackage("com.android.camera"); 
     startActivity(intent); 

    } 
    catch(ActivityNotFoundException e){ 
     Intent intent = new Intent(); 
     ComponentName comp = new ComponentName("com.android.camera", "com.android.camera.CameraEntry"); 
     intent.setComponent(comp); 
     startActivity(intent); 
    } 
} 
else{ //Any other 
    Intent intent = getPackageManager().getLaunchIntentForPackage(packageName); 
    startActivity(intent); 
} 
+0

與我已在我的評論 –

+0

中建議的相同,這是不正確的問題,我想你只是結合我的答案和評論,讓你的答案 –

0

爲什麼不嘗試使用捕獲圖像的代碼?

capturePhoto.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
       startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST); 
      } 
     }); 

我可以以相同的方式工作,或者想要默認調用相機應用程序嗎?

+0

因爲我不想要一個特殊cameraIntent 。我只想知道包名稱就可以啓動任何**應用程序。這工作正常,除非我嘗試啓動相機。 – Lars

1

嘗試爲使用getInstalledPackages

PackageManager pm = getPackageManager(); 
// PackageManager 
List<PackageInfo> packs = pm 
      .getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES); 
ArrayList<String> arrpackname=new ArrayList<String>(); 
for (PackageInfo pi : packs) { 

    if(pi.packageName.toLowerCase().contains("camera") && 
       pi.packageName.toLowerCase().contains("android")){ 

    Intent intent = pm.getLaunchIntentForPackage(pi.packageName); 

    if (intent != null) 
     startActivity(intent); 

    } 
} 

或者你可以嘗試爲:

Intent mIntent = new Intent(); 

ComponentName comp = new ComponentName("com.android.camera", 
              "com.android.camera.Camera"); 

mIntent.setComponent(comp); 
mIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
mIntent.setFlags(Intent.FLAG_FROM_BACKGROUND); 

mIntent.setAction("android.intent.action.VIEW"); 

startActivity(mIntent); 
+0

我正是使用這種方法從所有應用程序中獲取包名。問題是,當我嘗試啓動相機時,我的應用程序崩潰。 – Lars

+0

@Lars:不,你正在嘗試不同的。首先嚐試我的答案,然後讓我知道發生了什麼,我會給你其他解決方案 –

+0

好吧,我試過它aaaand它墜毀。12-28 19:13:14.774:E/AndroidRuntime(5840):java.lang.RuntimeException:Unable開始活動ComponentInfo {net.hobbycoder.android.test/net.hobbycoder.android.test.TestActivity}:android.content.ActivityNotFoundException:無法找到顯式活動類{com.android.camera/com.android.internal.app .ResolverActivity};你有沒有在你的AndroidManifest.xml中聲明這個活動? – Lars