例如,我正在向我的应用程序添加某些权限,以允许访问摄像头,一切都运行得很好。但是,当我最小化应用程序并禁用权限,然后打开应用程序时,应用程序崩溃,没有询问我重新启用权限(直到我关闭应用程序,然后打开它)。如何修复此错误,使应用程序不会崩溃并再次请求权限或安全重新启动以请求权限。
以下是我的代码
在主要活动中:
onCreate:
if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.CAMERA},
GlobalVariables.MY_PERMISSIONS_REQUEST_CAMERA);
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode)
{
case GlobalVariables.MY_PERMISSIONS_REQUEST_CAMERA:
{
if (grantResults.length <= 0
|| grantResults[0] != PackageManager.PERMISSION_GRANTED) {
globalVariables.ShowOKAlert("Error","Please Accept All Requested Permissions or the app wont function properly",this,false);
}
return;
}
}
}该活动实现ActivityCompat.OnRequestPermissionsResultCallback
发布于 2016-12-20 19:22:20
步骤1:
String[] permissions = new String[]{
Manifest.permission.INTERNET,
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
};第二步:-
private boolean checkPermissions() {
int result;
List<String> listPermissionsNeeded = new ArrayList<>();
for (String p : permissions) {
result = ContextCompat.checkSelfPermission(this, p);
if (result != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(p);
}
}
if (!listPermissionsNeeded.isEmpty()) {
ActivityCompat.requestPermissions(this, listPermissionsNeeded.toArray(new String[listPermissionsNeeded.size()]), 100);
return false;
}
return true;
}第3步:
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
if (requestCode == 100) {
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// do something
}
return;
}
}发布于 2016-04-18 20:14:52
您正在onCreate中检查该权限。当您再次最小化和最大化应用程序时,不会调用该方法。
也许你应该在你需要的地方检查权限,或者至少在onResume中检查,当你重新打开你的应用程序时肯定会再次调用它。
在onResume中调用它可以确保应用程序继续工作,如果用户在屏幕拆分的另一个窗口中禁用权限(Android N功能)。
发布于 2016-04-18 20:35:51
实现这一点的简单方法是使用ActivityCompat的直接静态方法
public static void requestPermissions(final @NonNull Activity activity,
final @NonNull String[] permissions, final int requestCode)在这里你可以看到你需要什么参数
-- Activity Instance
-- String array of permissions
-- a user defined request code
使用
定义全局变量
//Run-time permissions for MarshMallow +
public final String[] PERMISSION_ALL = {
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.CAMERA,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE
};
//validateRequestPermissionsRequestCode requires requestCode to be of 8 bits, i.e. range: 0-255.
public final int PERMISSION_REQUEST_CODE = 100;最后,在您的活动oncreate()方法中,您可以调用上面提到的静态函数
public class MainActivity extends AppCompatActivity
{
//your code here
@Override
protected void onCreate(Bundle savedInstanceState)
{
//do other code work
super.onCreate(savedInstanceState);
int currentapiVersion = android.os.Build.VERSION.SDK_INT;
if (currentapiVersion >= android.os.Build.VERSION_CODES.M)
{
ActivityCompat.requestPermissions(this, PERMISSION_ALL, PERMISSION_REQUEST_CODE);
}
//do other code work
}
//your code here
}然后你就完成了..。
有关安卓运行时权限的更多信息,请查看Click here
https://stackoverflow.com/questions/36693564
复制相似问题