Android requestPermission对话框未显示

问题描述 投票:0回答:2

我正在使用三星Galaxy Tab S平板电脑,并尝试在运行时授予在外部存储上写入的权限。

但是,请求权限的对话框不会显示。相反,代码onRequestPermissionResult将立即使用PERMISSION_DENIED结果执行。我甚至尝试在设备的应用程序设置中手动授予存储权限,但即使这样,结果也将是PERMISSION_DENIED(grantResults为-1)。

我的代码看起来像这样:

public class MainActivity extends AppCompatActivity {

    public static final int REQUEST_STORAGE_PERMISSION = 225;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        if (Build.VERSION.SDK_INT >= 23) {
            if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
                    == PackageManager.PERMISSION_GRANTED) {
                process();
            } else {
                requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_STORAGE_PERMISSION);
            }
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode) {
            case REQUEST_STORAGE_PERMISSION:
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    Toast.makeText(getApplicationContext(), "Permission Granted", Toast.LENGTH_LONG).show();
                    process();

                } else {
                    Toast.makeText(getApplicationContext(), "Permission Denied", Toast.LENGTH_LONG).show();
                }
        }
    }


    public void process() {
        //...
    }

}

启动应用程序时,它会立即显示“Permission Denied” - Tooast,而不会向我显示任何对话框。即使我在平板电脑的应用设置中手动授予存储权限,也会发生这种情况。

我的清单文件还包含在类似线程中建议的正确位置(应用程序标记之外)的权限。

我尝试重新安装应用程序,甚至已经重置平板电脑,但似乎没有任何工作。

android android-6.0-marshmallow android-permissions
2个回答
1
投票

代替:

 requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_STORAGE_PERMISSION); 

它适用于碎片

你需要使用这个:当你使用AppCompatActivity

ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_STORAGE_PERMISSION);

编辑

由于您有多个项目模块:您需要在这两个Manifest中添加权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

0
投票

做这件事

private boolean RequestPermissions() {

int camera = ContextCompat.checkSelfPermission(getActivity(), android.Manifest.permission.CAMERA);
int storage = ContextCompat.checkSelfPermission(getActivity(), android.Manifest.permission.WRITE_EXTERNAL_STORAGE);
List<String> listPermissionsNeeded = new ArrayList<>();
if (camera != PackageManager.PERMISSION_GRANTED) {
    listPermissionsNeeded.add(CAMERA);
}
if (storage != PackageManager.PERMISSION_GRANTED) {
    listPermissionsNeeded.add(WRITE_EXTERNAL_STORAGE);
    listPermissionsNeeded.add(READ_EXTERNAL_STORAGE);

}
if (!listPermissionsNeeded.isEmpty()) {
    ActivityCompat.requestPermissions(getActivity(), listPermissionsNeeded.toArray
            (new String[listPermissionsNeeded.size()]), REQUEST_ID_MULTIPLE_PERMISSIONS);
    return false;
}

return true;

}

© www.soinside.com 2019 - 2024. All rights reserved.