我尝试实施运行时权限,但FragmentActivity
收到onRequestPermissionResult()
时几乎没有问题。 checkPermissions()
方法效果很好,但在用户允许或拒绝权限后永远不会调用onRequestPermissionResult()
。
当系统对话框显示为请求权限时,永远不会调用MyActivity.onDestroy()
。它与这个问题有关吗?
我已经尝试过关注this one和another one,但我想我错过了什么。
我的设备是Nexus 5X(Android 6.0),目标SDK版本是23。
最低支持SDK版本为15。
当然,我在AndroidManifest.xml
中编写了所需的权限,并在build.gradle中添加了v23支持库。
这是我的代码:
public class MyActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
checkPermissions();
}
private void checkPermissions(){
String[] dangerousPermissions = {
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.GET_ACCOUNTS,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.RECORD_AUDIO
};
for(String permission : dangerousPermissions){
if (!hasPermission(permission)) {
Log.e("permission.debug", "need to grant " + permission);
ActivityCompat.requestPermissions(this, dangerousPermissions, 4);
}
}
}
public boolean hasPermission(String permission){
return ContextCompat.checkSelfPermission(this, permission) == PackageManager.PERMISSION_GRANTED;
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
Log.d("permission.debug", " request code " + requestCode);
for (int i = 0; i < permissions.length; i++) {
if (grantResults[i] == 0 && Manifest.permission.READ_PHONE_STATE.equals(permissions[i])) {
initiate();
}
}
}
}
这是我的代码的日志:
E/permission.debug: need to grant android.permission.READ_PHONE_STATE
E/permission.debug: need to grant android.permission.GET_ACCOUNTS
E/permission.debug: need to grant android.permission.WRITE_EXTERNAL_STORAGE
E/permission.debug: need to grant android.permission.RECORD_AUDIO
谢谢。
答案 0 :(得分:1)
尝试直接调用requestPermissions而不是ActivityCompat.requestPermissions。如下所示
compile 'com.melnykov:floatingactionbutton:1.3.0'
修改强>
我没有看到你在哪里定义了列表checkNeededPermissions。你可以把上面的日志记录下来吗
答案 1 :(得分:1)
我刚刚找到solution。
当您使用try:
book = xlrd.open_workbook(file_path)
print "Done"
except XLRDError:
print "Wrong type of file."
属性在AndroidManifest.xml
中声明活动时,当活动从屏幕上消失时,它将删除您的活动任务。
要接收noHistory
回调,您必须保证活动已恢复。
答案 2 :(得分:0)
有同样的问题。通过调用ActivityCompat.requestPermissions