2015-11-02 52 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指出的那样,问题是因为新的许可模式。我必须设置运行时检查每个权限的权限状态。

相关问题