我使用 Preview M 并在其上测试我的应用程序,尤其是“将文件保存到外部存储”部分。
在下载/保存过程开始之前,我请求
Manifest.permission.WRITE_EXTERNAL_STORAGE
开发者页面上描述的权限:https://developer.android.com/preview/features/runtime-permissions.html https://developer.android.com/preview/features/runtime-permissions.html
对话框按预期出现:
"Allow <AppName> to access photos, media, and files on your device?" Deny / Allow
如果我点击“拒绝”按钮,则会调用活动的 onRequestPermissionsResult 方法。
如果我按下“允许”按钮,则首先重新创建活动,然后调用 onRequestPermissionsResult 方法。我认为这是获得许可的结果。
但第二种情况很棘手,因为我想触发一个开始下载的回调,但此时该对象为空:
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
getLogger().error("onRequestPermissionsResult ( " + requestCode + ", " + permissions + ", " + grantResults + " )");
switch (requestCode) {
//permission for saving files?
case PermissionCode.WRITE_EXTERNAL_STORAGE: {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
//HERE IS THE NULL-OBJECT
if (controller != null) {
controller.triggerCallback();
}
}
break;
}
default: {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
}
所以我的问题是:
- 我可以避免这种娱乐活动吗?
- 如果不是,我该如何重新设计我的代码来解决问题 - 我现在完全没有想法
EDIT 1:
我尝试用处理程序和 postDelayed 解决问题 - 但我跳过了它。
EDIT 2:
我初步解决了这个问题,并向用户显示一个 Toast,请求再次按下下载按钮(如果获得许可)。但谷歌:你是认真的吗?
EDIT 3:
最新的 SDK 6.0(版本 23)没有进行任何娱乐 - 也许有人听到我在山景城的哭泣:-)