我有一个问题,权限检查更高版本的android.I我正在检查所有权限,但仍然在6.0上的应用程序崩溃 .
这是我的java代码:
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M &&
checkSelfPermission(android.Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)
{
requestPermissions(new String[]{android.Manifest.permission.GET_ACCOUNTS}, 0);
requestPermissions(new String[]{android.Manifest.permission.INTERNET}, 0);
requestPermissions(new String[]{android.Manifest.permission.ACCESS_NETWORK_STATE}, 0);
requestPermissions(new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, 0);
requestPermissions(new String[]{android.Manifest.permission.CALL_PHONE}, 0);
requestPermissions(new String[]{android.Manifest.permission.WAKE_LOCK}, 0);
requestPermissions(new String[]{android.Manifest.permission.ACCESS_COARSE_LOCATION}, 0);
requestPermissions(new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION}, 0);
}
else
{
jump_to_nextActivity();
}
}
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)
{
//super.onRequestPermissionsResult(requestCode, permissions, grantResults);
for (int i = 0, len = permissions.length; i < len; i++)
{
String permission = permissions[i];
if (grantResults[i] == PackageManager.PERMISSION_DENIED)
{
flag = false;
}
}
if(flag==true)
{
Intent i = new Intent(Splash.this,Home.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
//i.putExtra("EXIT", true);
startActivity(i);
Splash.this.finish();
}
}
这是我的Android Manifest:
<permission
android:name="android.OMMSoftware.Navsahydri.permission.MAPS_RECEIVE"
android:protectionLevel="signature"/>
<uses-permission android:name="android.OMMSoftware.Navsahydri.permission.MAPS_RECEIVE"/>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="fractal5.mythirdapp.permission.MAPS_RECEIVE" />
应用程序在较低版本上运行,但在6.0上测试它崩溃时,请帮忙 .
这是我的Logcat:
致命异常:主程序:android.inclusiveit.growbizz,PID:16919 java.lang.RuntimeException:发送失败结果ResultInfo {who = @ android:requestPermissions :, request = 0,result = -1,data = Intent }到活动{android.inclusiveit.growbizz / android.OMMSoftware.Navsahydri.Splash}:java.lang.NullPointerException:尝试调用虚方法'boolean java.lang.Boolean .booleanValue()'在android.app.ActivityThread.deliverResult(ActivityThread.java:3949)的android.app.ActivityThread.deliverResult(ActivityThread.java:3949)上的空对象引用,位于android.app.ActivityThread.-wrap16( ActivityThread.java)在Android.os.Looper.loop(Looper.java:207)的android.app.Handler.dispatchMessage(Handler.java:111)上的android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1543) )在com.android.internal.o的java.lang.reflect.Method.invoke(Native Method)的android.app.ActivityThread.main(ActivityThread.java:5776)上s.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:789)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)引起:java.lang.NullPointerException:尝试调用虚方法'boolean java .lang.Boolean.booleanValue()'在android.app.A活动上的一个空对象引用,android.app.Activity.dispatchRequestPermissionsResult(Activity.java:6969)上的android.app.Avsahydri.Splash.onRequestPermissionsResult(Splash.java:54) .Activity.dispatchActivityResult(Activity.java:6848)在android.app.ActivityThread.deliverResult(ActivityThread.java:3945)的android.app.ActivityThread.handleSendResult(ActivityThread.java:3992)android.app.ActivityThread.-wrap16 (ActivityThread.java)位于android.app.Loper.loop(Looper.java)的android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1543)android.os.Handler.dispatchMessage(Handler.java:111) 207)在com.android.inte的java.lang.reflect.Method.invoke(Native Method)的android.app.ActivityThread.main(ActivityThread.java:5776)上rnal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:789)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)
5 回答
您需要在Manifest中单独提及Android文档中分类为“Dangerous”的权限 . 这是一个例子:
您可以看到正常和危险权限的完整列表here
在这里,您只检查READ_EXTERNAL_STORAGE权限,请在清单中声明所有危险权限 . 比如ACCESS_FINE_LOCATION,ACCESS_COARSE_LOCATION
可能导致错误的原因是,您尚未将所有必需的权限声明为
manifest.xml
文件 .还有一件事,为什么要一次检查所有权限?相反,您可以在运行时检查权限,同时您的功能需要系统授予权限 .
此外,你有 There is no need to put android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M 条件 -
ContextCompat.checkSelfPermission() method which returns the result accordingly even in lower api versions.
错误发生在您的清单权限上 .
由于Android无法识别这些权限,因此请将其删除 .
当Android发布它的Marshmallow版本时,它引入了Runtime权限作为其功能之一 . 该功能包括在访问位置,相机,图库,联系人等时获得用户的许可 . 因此,每次用户尝试访问上述任何一项时,让我们在我们的案例中考虑相机,它会要求获得许可 . 弹出窗口会显示需要访问相机的权限,无论是允许还是拒绝 . 如果您拒绝并选中复选框,请勿再次询问,用户将无法在整个应用程序中访问相机 . 用户需要再次安装弹出窗口 . 用户可以通过两种方式授予权限:通过设置或弹出窗口 . 为了使其更加用户友好,我们在我们的应用程序中插入了弹出窗口
例如,您正在检查Location的权限,请在mapReady方法中使用此代码