0

私はつかれています。ここでは、カメラから画像を取得する私の方法、あり、そしてそれらを保存:ファイルを保存しようとするとカメラがクラッシュします

> > @Override 
>  public File createImageFile() throws IOException { 
>   String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); 
>   String imageFileName = "JPEG_" + timeStamp + "_"; 
>   File storageDir = context.getExternalFilesDir(Environment.DIRECTORY_PICTURES); 
>   File imageFile = File.createTempFile(imageFileName, ".jpg", storageDir); 
>   model.currentPhotoPath = imageFile.getAbsolutePath(); 
>   return imageFile; 
>  } 

@Override 
public Intent getCameraPictureIntent(PackageManager packageManager) { 
    Intent pictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    if (pictureIntent.resolveActivity(packageManager) != null) { 
     try { 
      model.userPicFile = createImageFile(); 
     } catch (IOException e) { 
      Log.i(TAG, "Can't create file!"); 
     } 
     if (model.userPicFile != null) { 
      model.userPicFileUri = FileProvider.getUriForFile(context, 
        "com.internship.droidz.talkin.fileprovider", 
        model.userPicFile); 
      pictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, model.userPicFileUri); 
     } 
    } 
    return pictureIntent; 
} 

私は一時ファイルを作成していますし、URIを取得し、意図に設定します。そして結果としてstartActivityを実行します。写真を撮って送信すると、アプリがクラッシュします。 Logcatは何も言わない。ここ

は、保存されたファイルとURIです:APIのための19+

をコンパイル

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

<uses-feature android:name="android.hardware.camera" 
    android:required="false" /> 

Log.iは言うされています:

をここ

public class RegistrationModel implements RegistrationContract.RegistrationModel { 

    String currentPhotoPath; 
    Uri userPicFileUri; 
    File userPicFile; 
} 

たManifest.xmlの権限あります

01-30 14:39:18.721 3265-3265/com.android.camera E/AndroidRuntime: FATAL EXCEPTION: main 
                   Process: com.android.camera, PID: 3265 
                   java.lang.IllegalStateException: Could not execute method of the activity 
                    at android.view.View$1.onClick(View.java:3823) 
                    at android.view.View.performClick(View.java:4438) 
                    at android.view.View$PerformClick.run(View.java:18422) 
                    at android.os.Handler.handleCallback(Handler.java:733) 
                    at android.os.Handler.dispatchMessage(Handler.java:95) 
                    at android.os.Looper.loop(Looper.java:136) 
                    at android.app.ActivityThread.main(ActivityThread.java:5001) 
                    at java.lang.reflect.Method.invokeNative(Native Method) 
                    at java.lang.reflect.Method.invoke(Method.java:515) 
                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 
                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 
                    at dalvik.system.NativeStart.main(Native Method) 
                   Caused by: java.lang.reflect.InvocationTargetException 
                    at java.lang.reflect.Method.invokeNative(Native Method) 
                    at java.lang.reflect.Method.invoke(Method.java:515) 
                    at android.view.View$1.onClick(View.java:3818) 
                    at android.view.View.performClick(View.java:4438)  
                    at android.view.View$PerformClick.run(View.java:18422)  
                    at android.os.Handler.handleCallback(Handler.java:733)  
                    at android.os.Handler.dispatchMessage(Handler.java:95)  
                    at android.os.Looper.loop(Looper.java:136)  
                    at android.app.ActivityThread.main(ActivityThread.java:5001)  
                    at java.lang.reflect.Method.invokeNative(Native Method)  
                    at java.lang.reflect.Method.invoke(Method.java:515)  
                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)  
                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)  
                    at dalvik.system.NativeStart.main(Native Method)  
                   Caused by: java.lang.SecurityException: Permission Denial: opening provider android.support.v4.content.FileProvider from ProcessRecord{52a0a5b0 3265:com.android.camera/u0a36} (pid=3265, uid=10036) that is not exported from uid 10058 
                    at android.os.Parcel.readException(Parcel.java:1465) 
                    at android.os.Parcel.readException(Parcel.java:1419) 
                    at android.app.ActivityManagerProxy.getContentProvider(ActivityManagerNative.java:2848) 
                    at android.app.ActivityThread.acquireProvider(ActivityThread.java:4399) 
                    at android.app.ContextImpl$ApplicationContentResolver.acquireUnstableProvider(ContextImpl.java:2208) 
                    at android.content.ContentResolver.acquireUnstableProvider(ContentResolver.java:1425) 
                    at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:906) 
                    at android.content.ContentResolver.openOutputStream(ContentResolver.java:669) 
                    at android.content.ContentResolver.openOutputStream(ContentResolver.java:645) 
                    at com.android.camera.Camera.doAttach(Camera.java:1385) 
                    at com.android.camera.Camera.onReviewDoneClicked(Camera.java:1362) 
                    at java.lang.reflect.Method.invokeNative(Native Method)  
                    at java.lang.reflect.Method.invoke(Method.java:515)  
                    at android.view.View$1.onClick(View.java:3818)  
                    at android.view.View.performClick(View.java:4438)  
                    at android.view.View$PerformClick.run(View.java:18422)  
                    at android.os.Handler.handleCallback(Handler.java:733)  
                    at android.os.Handler.dispatchMessage(Handler.java:95)  
                    at android.os.Looper.loop(Looper.java:136)  
                    at android.app.ActivityThread.main(ActivityThread.java:5001)  
                    at java.lang.reflect.Method.invokeNative(Native Method)  
                    at java.lang.reflect.Method.invoke(Method.java:515)  
                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)  
                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)  
                    at dalvik.system.NativeStart.main(Native Method)  
+0

権限の問題は多分ですか?どんなアンドロイド版をコンパイルしていますか? –

+0

"Logcatは何も言いません。"あなたのアプリが再起動して、アンドロイドスタジオのlogcatビューが最新の実行中のインスタンスのログだけを表示していることを推測しています。ログキャッチを「フィルタなし」に変更してエラーを表示してみてください。 (TAG、 "ファイルを作成できません!"、e); ' – petey

+0

ありがとうございました!私はこの問題を解決しました。答えはhttp://stackoverflow.com/questions/24467696/android-file-provider-permission-denialです – Koroqe

答えて

0

すべて!回答を使用してこの問題を解決しましたAndroid - file provider - permission denial

List<ResolveInfo> resInfoList = context.getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); 
for (ResolveInfo resolveInfo : resInfoList) { 
    String packageName = resolveInfo.activityInfo.packageName; 
    context.grantUriPermission(packageName, uri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION); 
} 
関連する問題