在FragmentActivity

时间:2016-09-04 17:45:17

标签: android android-fragmentactivity runtime-permissions

我尝试实施运行时权限,但FragmentActivity收到onRequestPermissionResult()时几乎没有问题。 checkPermissions()方法效果很好,但在用户允许或拒绝权限后永远不会调用onRequestPermissionResult()

当系统对话框显示为请求权限时,永远不会调用MyActivity.onDestroy()。它与这个问题有关吗?

我已经尝试过关注this oneanother 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

谢谢。

3 个答案:

答案 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

调用 MyActivity.this 而不是来解决此问题