2016-08-12 36 views
0

私のアプリで直接写真を撮ると、写真を保存する際に問題が発生します(例:whatsappなど)。私マニフェスト私が設定しているこれらの許可で写真で撮影した写真はギャラリーに保存されません

<uses-permission android:name="android.permission.CAMERA" /> 
<uses-feature android:name="android.hardware.camera" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<provider 
     android:name="android.support.v4.content.FileProvider" 
     android:authorities="com.myapp.fileprovider" 
     android:exported="false" 
     android:grantUriPermissions="true" 
     android:readPermission="com.myapp.READ"> 
     <meta-data 
      android:name="android.support.FILE_PROVIDER_PATHS" 
      android:resource="@xml/file_paths"/> 
    </provider> 

</application> 

私の活動で私が持っている:

public void showCamera(View v){ 
     Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); 
     if (intent.resolveActivity(getPackageManager()) != null) { 
      File photoFile = null; 
      try { 
       photoFile = createImageFile(); 
      } catch (IOException ex) { 

      } 

      if (photoFile != null) { 
       Uri photoURI = FileProvider.getUriForFile(this, 
         "com.myapp.fileprovider", 
         photoFile); 

       intent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI); 

       startActivityForResult(intent, REQUEST_TAKE_PHOTO); 
       galleryAddPic(); 
      } 
     } 
    } 

    String mCurrentPhotoPath; 


    private void galleryAddPic() { 
     Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); 
     File f = new File(mCurrentPhotoPath); 
     Uri contentUri = Uri.fromFile(f); 
     mediaScanIntent.setData(contentUri); 
     this.sendBroadcast(mediaScanIntent); 
    } 
    private File createImageFile() throws IOException { 
     // Create an image file name 
     String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); 
     String imageFileName = "JPEG_" + timeStamp + "_"; 
     File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES); 
     File image = File.createTempFile(
       imageFileName, /* prefix */ 
       ".jpg",   /* suffix */ 
       storageDir  /* directory */ 
     ); 

     // Save a file: path for use with ACTION_VIEW intents 
     mCurrentPhotoPath = "file:" + image.getAbsolutePath(); 
     return image; 
    } 

そして、私のfilePathにリソースに:

<paths xmlns:android="http://schemas.android.com/apk/res/android"> 
<external-path name="my_images" path="Android/data/com.myapp/files/Pictures" /> 

カメラを開いて写真を撮って自分の活動に戻しますが、どこにも見つからないので、写真を保存しないようです。

答えて

0

私はあなたがそれを探しているかを示すものではありませんでしたどこにでも

それを見つけることができません。あなたのデバイスやエミュレータのファイルシステムレベルの外観を得るには、adb shellを使用してください。

現在、無効なパスを使用しているため、ACTION_MEDIA_SCANNER_SCAN_FILEは機能しません。ファイルシステムのパスはfile:で始まらない。 mCurrentPhotoPathを完全に取り除き、代わりにリクエスト(またはACTION_MEDIA_SCANNER_SCAN_FILEの代わりにMediaScannerConnection.scanFile()を使用)を使用して、createImageFile()によって返されたファイルを保持することをおすすめします。

また、Hardikのメモによると、galleryAddPic()はあまりにも早く電話しています。 onActivityResult()galleryAddPic()と呼んで、画像がキャプチャされるまで待ちます。ファイルは現在galleryAddPic()にコールしている時点に存在する必要がありますが、正しい詳細(ファイルサイズなど)はありません。これはユーザーを混乱させる可能性があります。あなたは画像が準備ができるまで待っておくほうが良いです。

+0

私は 'onActivityResult'のオーバーライドに' galleryAddPic() 'を入れましたが、何も変更されていません。 'CreateImageFile()'と 'galleryAddPic()'から返された使用ファイルがあります。 'Uri contentUri = Uri.fromFile(photoFile);' sendBroadcastに問題がある可能性がありますか? – LorenzoBerti

+0

@LorenzoBerti: "5月はsendBroadcastに問題がありますか?" - 'adb shell 'を使用して、画像が保存されるべき場所に存在するかどうかを調べます。完全な写真がある場合は、メディアスキャンロジックに問題があります。ファイルが存在するが空であれば、画像キャプチャロジックに何か問題があります( 'createTempFile()'は空のファイルを作成しています)。ファイルが存在しない場合、コードは実行されていません。 – CommonsWare

+0

ありがとうございます、私はAndroid/data/com.myapp/files/Picturesの写真を再起動後に表示しますがギャラリーでは表示されません。どうすればメディアを更新してギャラリーに入れることができますか? – LorenzoBerti

1

すぐに動作していれば、取り込んだ画像を収集するonActivityResultにgalleryAddPic()メソッドを配置します。

関連する問題