Android 指定調用已安裝的某個「相機」App

在作項目時,有這樣一個需求:若是個人手機中安裝了四個相機軟件,那麼,在調用系統相機的時候,這四個相機軟件都會被列出來,可是其中的兩個在拍照完後並不能將拍得的照片返回給我,所以,能不能指定開啓一個我已知的能返回照片的相機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);
        }
相關文章
相關標籤/搜索