- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 fragment 。在此 fragment 中,我使用 onActivityResult() 在用户选择照片并将该照片导入我的应用程序时捕获 Intent :
Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CAMERA) {
if (resultCode == Activity.RESULT_OK) {
Uri takenPhotoUri = ImageUtils.getInstance().getPhotoFileUri(getContext(), imageFileName);
actionsListener.onSignalPhotoSelected(takenPhotoUri.getPath());
}
}
if (requestCode == REQUEST_GALLERY && resultCode == Activity.RESULT_OK && data != null && data.getData() != null) {
Uri fileUri = data.getData();
String path = null;
File photoFile = new File(fileUri.toString());
// Differentiate between SDK versions
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
// Code for Android 6 and > goes here
if(getActivity().checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
//showPermissionDialog(getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE_FOR_CLOUDE);
ActivityCompat.requestPermissions(getActivity(), new String[] {Manifest.permission.WRITE_EXTERNAL_STORAGE}, WRITE_EXTERNAL_STORAGE_FOR_CLOUDE);
}
try {
ParcelFileDescriptor parcelFileDesc = getActivity().getContentResolver().openFileDescriptor(fileUri, "r");
FileDescriptor fileDesc = parcelFileDesc.getFileDescriptor();
Bitmap photo = BitmapFactory.decodeFileDescriptor(fileDesc);
path = MediaStore.Images.Media.insertImage(getContext().getContentResolver(), photo, "temp", null);
parcelFileDesc.close();
// DRY!!
photoFile = ImageUtils.getInstance().getFromMediaUri(getContext(), getContext().getContentResolver(), Uri.parse(path));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
else {
// DRY!!
photoFile = ImageUtils.getInstance().getFromMediaUri(getContext(), getContext().getContentResolver(), data.getData());
}
if(photoFile != null) {
actionsListener.onSignalPhotoSelected(Uri.fromFile(photoFile).getPath());
}
}
if (requestCode == REQUEST_SIGNAL_DETAILS) {
if (resultCode == Activity.RESULT_OK) {
Signal signal = data.getParcelableExtra("signal");
if (signal != null) {
actionsListener.onSignalStatusUpdated(signal);
}
}
}
}
我的问题是:当用户从 Google 相册中选择一张照片(一张只存在于云端并且未本地下载的照片)时,我的应用程序崩溃并出现以下错误:
E/MediaStore: Failed to insert image java.lang.SecurityException: Permission Denial: writing com.android.providers.media.MediaProvider uri content://media/external/images/media from pid=9851, uid=10091 requires android.permission.WRITE_EXTERNAL_STORAGE, or grantUriPermission() at android.os.Parcel.readException(Parcel.java:1943) at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:183) at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135) at android.content.ContentProviderProxy.insert(ContentProviderNative.java:476) at android.content.ContentResolver.insert(ContentResolver.java:1539) at android.provider.MediaStore$Images$Media.insertImage(MediaStore.java:984) at org.helpapaw.helpapaw.signalsmap.SignalsMapFragment.onActivityResult(SignalsMapFragment.java:738) at android.support.v4.app.FragmentActivity.onActivityResult(FragmentActivity.java:151) at android.app.Activity.dispatchActivityResult(Activity.java:7235) at android.app.ActivityThread.deliverResults(ActivityThread.java:4320) at android.app.ActivityThread.handleSendResult(ActivityThread.java:4367) at android.app.ActivityThread.-wrap19(Unknown Source:0) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1649) at android.os.Handler.dispatchMessage(Handler.java:105) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6541) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) D/AndroidRuntime: Shutting down VM E/AndroidRuntime: FATAL EXCEPTION: main Process: org.helpapaw.helpapaw, PID: 9851 java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=196611, result=-1, data=Intent { dat=content://com.google.android.apps.photos.contentprovider/0/1/mediakey:/local%3Aabc88a06-d518-4fae-b85d-73f727595a90/ORIGINAL/NONE/1144559444 flg=0x1 clip={text/uri-list U:content://com.google.android.apps.photos.contentprovider/0/1/mediakey%3A%2Flocal%253Aabc88a06-d518-4fae-b85d-73f727595a90/ORIGINAL/NONE/1144559444} }} to activity {org.helpapaw.helpapaw/org.helpapaw.helpapaw.signalsmap.SignalsMapActivity}: java.lang.NullPointerException: uriString at android.app.ActivityThread.deliverResults(ActivityThread.java:4324) at android.app.ActivityThread.handleSendResult(ActivityThread.java:4367) at android.app.ActivityThread.-wrap19(Unknown Source:0) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1649) at android.os.Handler.dispatchMessage(Handler.java:105) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6541) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) Caused by: java.lang.NullPointerException: uriString at android.net.Uri$StringUri.(Uri.java:476) at android.net.Uri$StringUri.(Unknown Source:0) at android.net.Uri.parse(Uri.java:438) at org.helpapaw.helpapaw.signalsmap.SignalsMapFragment.onActivityResult(SignalsMapFragment.java:742) at android.support.v4.app.FragmentActivity.onActivityResult(FragmentActivity.java:151) at android.app.Activity.dispatchActivityResult(Activity.java:7235) at android.app.ActivityThread.deliverResults(ActivityThread.java:4320) at android.app.ActivityThread.handleSendResult(ActivityThread.java:4367) at android.app.ActivityThread.-wrap19(Unknown Source:0) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1649) at android.os.Handler.dispatchMessage(Handler.java:105) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6541) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
该错误的第一行让我想到了 WRITE_TO_EXTERNAL 权限错误:
E/MediaStore: Failed to insert image java.lang.SecurityException: Permission Denial: writing com.android.providers.media.MediaProvider uri content://media/external/images/media from pid=9851, uid=10091 requires android.permission.WRITE_EXTERNAL_STORAGE, or grantUriPermission()
所以我检查以确保此 API 版本需要“运行时”权限(如您在上面的代码中所见),以及以下行:
ActivityCompat.requestPermissions(getActivity(), new String[] {Manifest.permission.WRITE_EXTERNAL_STORAGE}, WRITE_EXTERNAL_STORAGE_FOR_CLOUDE);
被击中,但屏幕上没有出现确认对话框。另一个有趣的事实是,该错误仅在我第一次运行该应用程序时发生(在 API 8.0 上)并且在 5.1、6.0、7.1 和 8.1 上运行良好但在 8.0(模拟器)上崩溃。我错过了什么?
最佳答案
对于任何遇到类似问题的人;关键是使用(在我的例子中)Fragment.requestPermissions(String[] permissions, int requestCode);
方法一次请求所有必要的权限。此方法允许将一组权限传递给它的第一个参数:
String[] permissions = {Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE};
if (ContextCompat.checkSelfPermission(getContext(), Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED &&
ContextCompat.checkSelfPermission(getContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(permissions, READ_WRITE_EXTERNAL_STORAGE_FOR_GALLERY);
}
我希望我知道的是:
一旦一个新的 Activity 被 Intent 调用,无论是相机还是照片库;试图向用户询问权限不再有效;意思是——一旦相机或照片库打开,我们就失去了我们自己的应用程序的上下文,因此我们不能再提示用户权限。最重要的是,在用户离开我们的应用程序之前请求所有权限(在我的例子中,需要使用数组来请求读取和写入外部存储的权限。请求所有必要的权限在用户离开当前上下文之前的同一时间,然后通过 Intent 重定向到新的 Activity。
我希望这对某人有帮助。
关于android - 努力获得 'run-time' Android WRITE_EXTERNAL_STORAGE 权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53437311/
当拥有 WRITE_EXTERNAL_STORAGE 权限时,我希望有权写入整个文件系统(例如 /sdcard、/storage/emulated/0 ,/storage/sdcard0,/mnt/s
我正在将我的 Android 应用程序的目标 SDK 版本升级到 23 (Android M),它具有新的运行时权限 (https://developer.android.com/training/p
我想要的只是能够在一个非常特定的文件夹(与我的应用程序相关)中为我的应用程序编写日志/异常报告,以便了解失败和异常,所以这是我正在使用的代码: File logFile = new File(Envi
正在关注 this discussion ,我已经签署了一个系统应用程序,我正在使用从制造商那里收到的特定设备的专有平台证书。我签名如下: java -jar out/host/linux-x86/f
据我所知,要将声音设置为铃声,应将其插入 MediaStore。在 MediaStore 中写入,需要 WRITE_EXTERNAL_STORAGE 权限。但是...有没有办法在不需要 WRITE_E
下面的代码输出是“Write granted”,但之后出现错误 '/storage/emulated/0/Download/test.txt: open failed: EACCES (Permiss
是否可以在不添加任何权限的情况下共享自己的应用程序屏幕截图? 这是我的其他应用程序代码,用于复制到缓存和共享 public void sendFile(File paramFile) {
我开始将 HERE Android Starter SDK 集成到我的应用程序中。根据文档(和运行时错误),初始化 MapEngine 需要权限 WRITE_EXTERNAL_STORAGE: Map
我有使用的应用程序 它在 Android 6.0 上自动授予,但我可以在设置中撤销它。想要检查它是否被授予以防用户撤销它,所以我这样做: int permissionCheck = ContextC
如 documentation 中所述,从 API 级别 19 开始,WRITE_EXTERNAL_STORAGE 权限不应该是必需的。因此,我已将其写入 list : 但是,当我运行使用 Goog
有没有一种方法可以使用 Intent.ACTION_SEND 来共享屏幕截图而不需要 android.permission.WRITE_EXTERNAL_STORAGE? 分享部分如下: In
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
我有一个 android 应用程序需要以下权限才能运行。 ACCESS_FINE_LOCATION、ACCESS_WIFI_STATE、WRITE_EXTERNAL_STORAGE、RECORD_AU
安卓 6 我编写了下一个检查权限的代码,如果没有这样的权限,它会要求用户提供它们。 private void checkDiskPermission () { if (ActivityComp
我目前使用此方法有效地将图像文件转换为内容 uri... protected static Uri convertFileToContentUri(Context context, File file
我正在使用下载管理器下载文件并将其保存到外部存储,如下所示: DownloadManager.Request req = new DownloadManager.Request(uri); req.s
在 android 6 或更高版本中,当用户第一次打开应用时询问他一些权限如果他不允许则退出应用程序 我的应用程序必须有一些权限是读取和写入外部存储,如何实现这一点 我试过了 if (Build.VE
声明就够了吗?还是我也必须声明 ? Javadocs 省略了这一重要信息。 最佳答案 最好是显式地声明这两个权限,但仅声明 android.permission.WRITE_EXTERNAL_STOR
我使用 DownloadManager 下载照片并将其保存到外部图片目录: .setDestinationInExternalPublicDir(Environment.DIRECTORY_PICTU
AS 中有一个关于 android.permission.WRITE_EXTERNAL_STORAGE 的 lint 警告.警告说,当面向 Android 10 及更高版本时,该权限将不再提供写入权限
我是一名优秀的程序员,十分优秀!