2013-09-26 62 views
0

的图像,我用这个方法得到的图像:检测源从摄像头的Android

protected void openImageSelection(int intentCode, Uri fileUri) { 
    // Camera. 
    final List<Intent> cameraIntents = new ArrayList<Intent>(); 
    final Intent captureIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
    final PackageManager packageManager = getPackageManager(); 
    final List<ResolveInfo> listCam = packageManager.queryIntentActivities(captureIntent, 0); 
    for(ResolveInfo res : listCam) { 
     final String packageName = res.activityInfo.packageName; 
     final Intent intent = new Intent(captureIntent); 
     intent.setComponent(new ComponentName(res.activityInfo.packageName, res.activityInfo.name)); 
     intent.setPackage(packageName); 
     cameraIntents.add(intent); 
    } 

    // Filesystem. 
    final Intent galleryIntent = new Intent(); 
    galleryIntent.setType("image/*"); 
    galleryIntent.setAction(Intent.ACTION_GET_CONTENT); 

    // Chooser of filesystem options. 
    final Intent chooserIntent = Intent.createChooser(galleryIntent, 
         getResources().getString(R.string.magafy_replace_image_tankboon_chooser)); 

    // Add the camera options. 
    chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, cameraIntents.toArray(new Parcelable[]{})); 

    startActivityForResult(chooserIntent, intentCode); 
} 

,我发现这里的SO,贷款到期时我只是不记得从后(对不起)。

我试图检测图像是否带有这个意图源自相机应用程序或画廊。目前我使用的是:

private boolean isTakenByCam(Intent data) { 
     boolean isCamera; 
     if(data == null){ 
      isCamera = true; 
     } else { 
      isCamera = MediaStore.ACTION_IMAGE_CAPTURE.equals(data.getAction()); 
     } 
     return isCamera; 
} 

也来自同一篇文章,我认为。

我的问题是,使用股票凸轮一切工作正常(检测从所有kinda画廊的应用程序,我看到工作正常),但是当在非股票摄像头拍照时,data.getAction()返回null有时,有时甚至完全是其他的东西。

是否有另一种方法来了解图像的来源?

感谢

回答

0

它不是太多的答案,但我解决它通过相机意图URI作为一个额外的,只是认为我作为开放的结果基于而不是使用getExtras().get("data")

应该试着找到另一种方式,因为我看到不建议使用intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);