android capture 拍照 点击确定无反应

调用系统相机进行拍照,照片保存到指定目录。

代码:

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
File file = new File( path );
Uri uri  = Uri.fromFile(file);
camera_path = uri.toString();
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);


网上代码很多,copy可以使用,但是换个手机之后就有问题出现了。
拍照以后按确定不返回 onActivityResult。 也不出现异常提醒

调试发现 Environment.getExternalStorageState() 为 "removed"
  Environment.getExternalStorageDirectory() 返回的目录是 "/storage/sdcrad0"

不采用调用的方式直接拍照,图片存储的地址为 "/storage/sdcrad1/DCIM/Camera/XX.jpg"

问题的原因找到了,某些手机上是有2张sdcard
而"storage/sdcrad0"不能创建文件,Environment.getExternalStorageDirectory()返回的又是"sdcrad0"

问题既然原因既然找到了,就来解决它。
我的解决思路是这样的:列出手机上所有的sdcrad,逐个检测能用的

代码改为:获得能使用的顶级sdcard目录
File file = new File( SdCardHelper.getMountedStorageDirectory() +  path );

结合网上的代码写了一个工具类:

 public class SdCardHelper {

    public static String[] getSdcardPaths()
    {
        String paths[] = null;
        StorageManager sm = (StorageManager) ContextHelper.getContext().getSystemService(Context.STORAGE_SERVICE);
        try {
            paths = (String[]) sm.getClass().getMethod("getVolumePaths", null).invoke(sm, null);
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        }
       return paths;
    }

    public static String getMountedStorageDirectory()
    {
        String paths[] = getSdcardPaths();
        for( int i=0;i


 

你可能感兴趣的:(android)