Android Nougat의 FileProvider가있는 기본 Android 갤러리 앱에 앱 사진을 표시하려면 적절한 권한을 설정하고 정확한 경로를 어떻게 설정합니까?Android Nougat이 포함 된 Android 갤러리에 앱 사진 표시
아래는 현재 코드입니다. 사진을 로컬에 저장하지만 사진은 Android 갤러리 앱에 표시되지 않습니다.
이 CameraActivity.java
public class CameraPreviewActivity extends AppCompatActivity
implements CameraPreviewFragment.Callback {
...
@Override
protected void onCreate(Bundle savedInstanceState) {
...
showCamera();
}
public void showCameraPreviewFile() {
_photoFileUri = generateTimestampPhotoUri();
if (_photoFileUri != null) {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, _photoFileUri);
startActivityForResult(intent, PHOTO_INTENT_WITH_FILENAME);
}
}
File getPhotoDirectory() {
File outputDir = null;
String externalStorageState = Environment.getExternalStorageState();
if (externalStorageState.equals(Environment.MEDIA_MOUNTED)) {
File picturesDir =
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
outputDir = new File(picturesDir, getString(R.string.app_name));
if (!outputDir.exists()) {
if (!outputDir.mkdirs()) {
Log.e(LOG_TAG, "outputDir.mkdirs: error");
outputDir = null;
}
}
}
return outputDir;
}
Uri generateTimestampPhotoUri() {
Uri photoUri = null;
File outputDir = getPhotoDirectory();
File photoFile = null;
if (outputDir != null) {
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String photoFileName = "IMG_" + timeStamp + ".jpg";
photoFile = new File(outputDir, photoFileName);
}
if (photoFile != null) {
photoUri = FileProvider.getUriForFile(
this,
this.getApplicationContext().getPackageName() + ".provider",
photoFile
);
}
return photoUri;
}
의 AndroidManifest.xml
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths" />
XML/provider_paths.xml
<?xml version="1.0" encoding="utf-8"?>
<paths>
<external-path name="MyApp" path="."/>
</paths>
나는 그것을 호출 할 수 있었고,'onScanCompletedListener' 콜백이 성공했다. 나는 아직 갤러리에서 이미지를 보지 못했다. 동기화하는 데 시간이 걸립니까? 또한 이것은 내 파일 경로입니다 :'content : // com.myapp.myapp.provider/Myapp/Pictures/Myapp/IMG_20161129_073601.jpg' 이것은 갤러리 응용 프로그램에서 발견 할 수있는 유효한 파일 경로라고 가정합니다. 도와 주셔서 정말 감사합니다. 안드로이드에서 배워야 할 것이 많기 때문에 쉽게 붙잡을 수 있습니다. –
@AaronLelevier : "이것은 내 파일 경로입니다"- 파일 경로가 아닙니다. "갤러리 앱이 발견 할 수있는 유효한 파일 경로라고 생각하고 있습니까?" -- 아니. 그것은'FileProvider'를 가리키는'Uri'입니다. 파일 경로는'photoFile' 객체에 있습니다. 구성 변경을 포함하여이 값을 유지해야합니다 (예 : onSaveInstanceState() 사용). 그리고'scanFile()'호출에서'photoFile'의 파일 경로를 사용해야합니다. – CommonsWare