在作項目時,有這樣一個需求:若是個人手機中安裝了四個相機軟件,那麼,在調用系統相機的時候,這四個相機軟件都會被列出來,可是其中的兩個在拍照完後並不能將拍得的照片返回給我,所以,能不能指定開啓一個我已知的能返回照片的相機App?app
整個解決過程以下:this
參考資料:http://my.oschina.net/armsky/blog/54692spa
運行參考資料中所示代碼時,遇到兩個問題:.net
(一)、「相機」App同一時間被打開兩次;意即我須要按兩次「返回」才能退出被打開的「相機」App。code
(二)、用「相機」App拍完照後不能獲得其返回值。事實上,若是用Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE)來調用「相機」App是會獲得拍到的照片的。blog
所以,在參考資料文中所示代碼的基礎上作了修改,解決了上述兩個問題。具體的代碼以下所示:
get
PackageInfo pi = null; try { //得到相機包名信息 pi = getPackageManager().getPackageInfo("com.motorola.CameraF", 0); } catch (NameNotFoundException e) { e.printStackTrace(); } //得到當前應用程序的包管理器 PackageManager pm = TestCallBackExampleActivity.this.getPackageManager(); Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null); resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER); resolveIntent.setPackage(pi.packageName); List<ResolveInfo> apps = pm.queryIntentActivities(resolveIntent, 0); ResolveInfo ri = apps.iterator().next(); if (ri != null ) { String packageName = ri.activityInfo.packageName; String className = ri.activityInfo.name; // 此處將Intent的Action設置爲捕獲照片 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); // Intent intent = new Intent(Intent.ACTION_MAIN); // 相機主界面 // 設置指望被打開的App包名和類名 ComponentName cn = new ComponentName(packageName, className); intent.setComponent(cn); startActivityForResult(intent, 1); }