1

enter image description here如果我使用的ContentProvider在我的应用我得到错误,如‘不幸的是相机已停止’后Result_ok.This是我的代码:不幸相机已停止”,而使用内容提供商

Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
         i.putExtra(MediaStore.EXTRA_OUTPUT, MyFileContentProvider.CONTENT_URI); 
startActivityForResult(i, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE); 

如何解决这个?我不想保存的图像在SD卡

这是我MyFileContentProvider类:

public class MyFileContentProvider extends ContentProvider { 

    public static final Uri CONTENT_URI = Uri.parse("content://com.example.user.studentadmission/"); 
    private static final HashMap<String, String> MIME_TYPES = new HashMap<String, String>(); 
    static { 
     MIME_TYPES.put(".jpg", "image/jpeg"); 
     MIME_TYPES.put(".jpeg", "image/jpeg"); 
    } 
    @Override 
    public boolean onCreate() { 
     try { 
      File mFile = new File(getContext().getFilesDir(), "student.jpg"); 
      if(!mFile.exists()) { 
       mFile.createNewFile(); 
      } 
      getContext().getContentResolver().notifyChange(CONTENT_URI, null); 
      return (true); 
     } catch (Exception e) { 
      e.printStackTrace(); 
      return false; 
     } 
    } 

    @Override 
    public String getType(Uri uri) { 
     String path = uri.toString(); 
     for (String extension : MIME_TYPES.keySet()) { 
      if (path.endsWith(extension)) { 
       return (MIME_TYPES.get(extension)); 
      } 
     } 
     return (null); 
    } 

    @Override 
    public ParcelFileDescriptor openFile(Uri uri, String mode) 
      throws FileNotFoundException { 
     File f = new File(getContext().getFilesDir(), "student.jpg"); 
     if (f.exists()) { 
      return (ParcelFileDescriptor.open(f, 
        ParcelFileDescriptor.MODE_READ_WRITE)); 
     } 
     throw new FileNotFoundException(uri.getPath()); 
    } 

    @Override 
    public Cursor query(Uri url, String[] projection, String selection, 
         String[] selectionArgs, String sort) { 
     throw new RuntimeException("Operation not supported"); 
    } 

    @Override 
    public Uri insert(Uri uri, ContentValues initialValues) { 
     throw new RuntimeException("Operation not supported"); 
    } 

    @Override 
    public int update(Uri uri, ContentValues values, String where, 
         String[] whereArgs) { 
     throw new RuntimeException("Operation not supported"); 
    } 

    @Override 
    public int delete(Uri uri, String where, String[] whereArgs) { 
     throw new RuntimeException("Operation not supported"); 
    } 

} 
+0

发表您的logcat的消息。这将有助于理解问题。 – ajantha

+0

@Amshu我建议你去通过[这](https://github.com/google/cameraview)为例,其良好的一个。 – Nisarg

+0

@ajantha我在logcat中没有收到任何消息。 – Amshu

回答

2

很少有相机的动作只适用于Kitkat,使用动作条件:

Intent i = (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) 
         ? new Intent(MediaStore.ACTION_IMAGE_CAPTURE_SECURE) 
         : new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 

i.putExtra(MediaStore.EXTRA_OUTPUT, MyFileContentProvider.CONTENT_URI); 
startActivityForResult(i, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE); 

如果仍然发生崩溃,请尝试避免使用ContentProvider进行测试。让我知道。

+0

还是我得到同样的错误error.This在5.1版本及版本6.0.1 – Amshu

+0

工作正常,如果我评论i.putExtra(MediaStore.EXTRA_OUTPUT,MyFileContentProvider.CONTENT_URI);没有问题,但图像质量会变得模糊。 – Amshu

+0

模糊图像与内容提供商无关。尽量不要使用它。 – W4R10CK

0

给予准许的开放式摄像机。 为打开的相机提供运行时权限。