2015-11-02 110 views
0

我已經成功創建了列出圖庫,文檔和相機的意向選擇器。但是當我嘗試從選擇器中選擇Camera時,點擊它時沒有任何反應。
我試圖用Camera Intent創建一個選擇器,即使這樣結果也是一樣的。Android Intent.createChooser不會在點擊時打開相機活動

此確切代碼在Marshmallow更新之前有效。我懷疑它與它有關。你有沒有遇到類似的問題?你是如何解決它的?

以下是我的代碼來創建一個意向選擇器。

public Intent getPickImageChooserIntent() { 

    // Determine Uri of camera image to save. 
    fileUri = getCaptureImageOutputUri(); 

    List<Intent> allIntents = new ArrayList<>(); 
    PackageManager packageManager = getPackageManager(); 

    // collect all camera intents 
    Intent captureIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
    List<ResolveInfo> listCam = packageManager.queryIntentActivities(captureIntent, 0); 
    for (ResolveInfo res : listCam) { 
     Intent intent = new Intent(captureIntent); 
     intent.setComponent(new ComponentName(res.activityInfo.packageName, res.activityInfo.name)); 
     intent.setPackage(res.activityInfo.packageName); 
     if (fileUri != null) { 
      intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); 
     } 
     allIntents.add(intent); 
    } 

    // collect all gallery intents 
    Intent galleryIntent = new Intent(Intent.ACTION_GET_CONTENT); 
    galleryIntent.setType("image/*"); 
    List<ResolveInfo> listGallery = packageManager.queryIntentActivities(galleryIntent, 0); 
    for (ResolveInfo res : listGallery) { 
     Intent intent = new Intent(galleryIntent); 
     intent.setComponent(new ComponentName(res.activityInfo.packageName, res.activityInfo.name)); 
     intent.setPackage(res.activityInfo.packageName); 
     allIntents.add(intent); 
    } 

    // the main intent is the last in the list (fucking android) so pickup the useless one 
    Intent mainIntent = allIntents.get(allIntents.size() - 1); 
    for (Intent intent : allIntents) { 
     if (intent.getComponent().getClassName().equals("com.android.documentsui.DocumentsActivity")) { 
      mainIntent = intent; 
      break; 
     } 
    } 
    allIntents.remove(mainIntent); 

    // Create a chooser from the main intent 
    Intent chooserIntent = Intent.createChooser(mainIntent, "Select source"); 

    // Add all other intents 
    chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, allIntents.toArray(new Parcelable[allIntents.size()])); 

    return chooserIntent; 
} 
+2

[新的權限模型...](https://developer.android.com/training/permissions/requesting.html) – tynn

+0

謝謝@tynn指引我在正確的方向。這確實是因爲運行時權限模型。 – Kshitij

回答

0

正如@Tynn指出的那樣,問題是因爲新的許可模式。我必須設置運行時檢查每個權限的權限狀態。

相關問題