如何授予适当的权限并设置正确的路径,以便使用 Android Nougat 中的 FileProvider 在 native Android Gallery 应用中显示应用照片?
以下是当前代码。它将在本地保存照片,但照片不会显示在 Android Gallery 应用中。
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>
最佳答案
没有单一的“原生 Android Gallery 应用程序”。 Android 设备数量约为 20 亿,分布在数千种设备型号中。这些设备上预装了数百个“图库”应用程序,因为设备制造商通常会发布自己的应用程序。用户还可以从应用市场安装“图库”应用。
他们的行为会有所不同。许多人会使用 MediaStore
来查找要查看的照片。您没有做任何事情来安排您的图像被 MediaStore
索引。在 onActivityResult()
中使用 MediaScannerConnection
及其 scanFile()
方法,让 MediaStore
将其目录更新为包括您的图像。
关于java - 使用 Android Nougat 在 Android Gallery 中显示应用程序图片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40868295/