首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我不同意在较高版本的android中进行权限检查。

我不同意在较高版本的android中进行权限检查。
EN

Stack Overflow用户
提问于 2017-03-22 05:49:46
回答 5查看 975关注 0票数 0

我有一个问题,在更高版本的android.I的权限签入,我正在检查所有的许可,但仍然应用崩溃在6.0。

这是我的java代码:

代码语言:javascript
运行
复制
  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宣言:

代码语言:javascript
运行
复制
     <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上崩溃,请帮助。

这是我的逻辑猫:

致命异常:主进程: android.inclusiveit.growbizz,PID: 16919 java.lang.RuntimeException: Failure传递结果ResultInfo{who=@android:requestPermissions:,request=0,结果=-1,activity {android.inclusiveit.growbizz/android.OMMSoftware.Navsahydri.Splash}:java.lang.NullPointerException:尝试在android.app.ActivityThread.deliverResults(ActivityThread.java:3949)上调用空对象引用上的虚拟方法'boolean java.lang.Boolean.booleanValue()‘在android.app.ActivityThread.handleSendResult(ActivityThread.java:3992) at android.app.ActivityThread.-wrap16(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1543)在android.os.Handler.dispatchMessage(Handler.java:111) at android.os.Looper.loop(Looper.java:207)在android.app.ActivityThread.main(ActivityThread( com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)的java.lang.reflect.Method.invoke(原生方法))由: com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)引起的:尝试在android.OMMSoftware.Navsahydri.Splash.onRequestPermissionsResult(Splash.java:上调用空对象引用上的虚拟方法‘布尔java.lang.Boolean.booleanValue()’54)在android.app.Activity.dispatchRequestPermissionsResult(Activity.java:6969) at android.app.Activity.dispatchActivityResult(Activity.java:6848) at android.app.ActivityThread.deliverResults(ActivityThread.java:3945) at android.app.ActivityThread.handleSendResult(ActivityThread.java:3992) at android.app.ActivityThread.-wrap16(ActivityThread.java)在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1543) at android.os.Handler.dispatchMessage(Handler.java:111) at android.os.Looper.loop(Looper.java:207)在android.app.ActivityThread.main(ActivityThread.java:5776) at java.lang.reflect.Method.invoke(本地方法)在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)的java:789)

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2017-03-22 06:06:00

可能的错误原因可能是,您还没有将所有必需的权限声明到manifest.xml文件中。

请注意,如果您请求的权限没有声明到manifest.xml中,系统本身将始终以denied的形式返回该权限。

还有一件事,你为什么要立刻检查所有的许可?相反,您可以做的是,在运行时检查该权限,而您的函数需要系统授予权限。

而且,android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M 没有必要像你一样把条件-

ContextCompat.checkSelfPermission() 方法,它相应地返回结果,即使在较低的api版本中也是如此。

票数 0
EN

Stack Overflow用户

发布于 2017-03-22 05:55:07

您需要在清单中分别提到Android文档分类为“危险”的权限。下面是一个例子:

代码语言:javascript
运行
复制
<permission
    android:name="android.permission.ACCESS_COARSE_LOCATION"
    android:protectionLevel="dangerous" />

您可以看到正常权限和危险权限的全部列表这里

票数 0
EN

Stack Overflow用户

发布于 2017-03-22 05:59:29

这里您只检查READ_EXTERNAL_STORAGE权限,请在清单中声明所有危险权限。像ACCESS_FINE_LOCATION,ACCESS_COARSE_LOCATION

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42943706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档