2017-11-10 32 views
0

私は自分のアプリで写真を撮って保存しようとしています。私がボタンを持っている断片ダイアログ(cameraOrChoosePhotoダイアログ)は、次の写真のためのファイルを作成するためのカメラや他のアクションを開くための意図を作る呼んで私の活動では写真はギャラリーに表示されません

<provider 
      android:name="android.support.v4.content.FileProvider" 
      android:authorities="mypacage.fileprovider" 
      android:exported="false" 
      android:grantUriPermissions="true"> 
     <meta-data 
      android:name="android.support.FILE_PROVIDER_PATHS" 
      android:resource="@xml/path" /> 
      </provider> 

<paths xmlns:android="http://schemas.android.com/apk/res/android"> 
    <files-path name="my_images" path="images"/> 

</paths> 

: 私はマニフェストに彼のためfileproviderとパスを書きました: :私の活動の

@Override 
    public void onClick(View v) { 
     switch (v.getId()) { 
      case R.id.dialog_camera: 
       Uri uri = generateUriPhoto(); 
       if(uri!=null) { 
        Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
        cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri); 
        cameraIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | 
                  Intent.FLAG_GRANT_WRITE_URI_PERMISSION); 
        getActivity().startActivityForResult(cameraIntent, SubItemDetail.CAMERA_RESULT); 
       } else dismiss(); 
       break; 
      case R.id.dialog_choose_photo: 
       break; 
     } 
    } 

    private Uri generateUriPhoto() { 
     file = createNameFile(); 
     uri = null; 
     if (file != null) { 
         String aut = getActivity().getPackageName()+".fileprovider"; 
         uri = getUriForFile(getActivity(), aut, file); 

         getActivity().grantUriPermission(getActivity().getPackageName(), uri, 
                       Intent.FLAG_GRANT_READ_URI_PERMISSION | 
                       Intent.FLAG_GRANT_WRITE_URI_PERMISSION); 
     } 
     return uri; 

    } 

    public File getFile() { 
     return file; 
    } 

    public Uri getUri() { // onActivityResult 
     return uri; 
    } 

    private File createNameFile() { 
     directory = new File(getActivity().getFilesDir(), "images"); 
     if (!directory.exists()) { 
      directory.mkdirs(); 
     } 
     String name = "photo_" + System.currentTimeMillis(); 
     File file = null; 
     try { 
      file = File.createTempFile(
        name, /* prefix */ 
        ".jpg",   /* suffix */ 
        directory  /* directory */ 
      ); 
     } catch (IOException e) { 
      e.printStackTrace(); 
      dismiss(); 
     } 
     return file; 
    } 

次へ:

.........

private Uri uri 

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     CameraOrChoosePhotoDialog cameraOrChoosePhotoDialog = (CameraOrChoosePhotoDialog)    getFragmentManager().findFragmentByTag("camera"); 

     uri = cameraOrChoosePhotoDialog.getUri();// get uri from dialogfargment 

     if (resultCode == RESULT_OK) { 
      if (requestCode == CAMERA_RESULT) { 

       image.setImageURI(uri); 
       addPicToGallery(); // try to put photo in gallery 

       cameraOrChoosePhotoDialog.dismiss(); // close dialog 
      } 
     } 
    } 

    private void addPicToGallery() { 

     Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,uri)); 
     mediaScanIntent.setData(uri)); 
     sendBroadcast(mediaScanIntent); 


    } 

写真はギャラリーに表示されません

+0

私は正常にキャプチャした後にイメージを保存する必要があると思う、あなたはシステムに存在するファイルをスキャンしているだけです。最初にfileOutputStreamを使用してビットマップを圧縮して保存してから、(sendBroadcast) –

+0

@Demo Mailをスキャンします。 Android StudioのAMDでは、これらの作成されたファイルに拡張子.jpgが付いています。フォルダ内... /ファイル/ images/ –

+0

あなたはそのイメージを開くことができますか?有効な画像を見ることができますか? –

答えて

0

キャプチャしたファイルを.jpeg、.pngなどの画像形式に変換してから、デバイスのローカルストレージまたはSDカードに保存してください。

+0

Android StudioのAMDでは、これらの作成されたファイルに拡張子.jpgが付いています。 –

関連する問題