android 6.0 开发中 遇到权限授予方式变更的问题
2016-04-24 00:17
639 查看
代号棉花糖的android 6.0版本中,google对权限加强了控制,不像以前一样直接在AndroidManifest.xml中简单声明一下就可以,而是要在activity中队权限进行请求。
这段时间在写一个弹出对话框的小功能(
恰巧手机刷了6.0原声的包,模拟器也是自动下载的6.0,所以当时毫无头绪,调试了好久都没有解决。
再加之有个同学用的6.0的miui运行也没有见到问题,就没有考虑是安卓版本搞的鬼。
后来爬帖子过程中,还是发现6.0权限请求方式发生了变化。
可惜本人英文太渣,刚开始没看懂,后来动手搞了搞,终于解决了这个问题。
在Activity.java中加入请求的代码,这里权限是解决了AlertDialog弹窗的问题。
之后在初始化函数中调用请求权限函数
参考链接:
stackoverflow
聊一聊Android 6.0的运行时权限
这段时间在写一个弹出对话框的小功能(
AlertDialog),对着书里面写,几乎没有什么差别,但是总是报错,提示权限授予上有问题
E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.hauru.myexperiment4, PID: 17990 java.lang.RuntimeException: Unable to start receiver com.example.hauru.myexperiment4.ForceOfflineReceiver: java.lang.SecurityException: com.example.hauru.myexperiment4 from uid 10058 not allowed to perform SYSTEM_ALERT_WINDOW at android.app.ActivityThread.handleReceiver(ActivityThread.java:2732) at android.app.ActivityThread.-wrap14(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1421) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) Caused by: java.lang.SecurityException: com.example.hauru.myexperiment4 from uid 10058 not allowed to perform SYSTEM_ALERT_WINDOW at android.os.Parcel.readException(Parcel.java:1599) at android.os.Parcel.readException(Parcel.java:1552) at android.view.IWindowSession$Stub$Proxy.addToDisplay(IWindowSession.java:747) at android.view.ViewRootImpl.setView(ViewRootImpl.java:531) at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:310) at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:85) at android.app.Dialog.show(Dialog.java:319) at com.example.hauru.myexperiment4.ForceOfflineReceiver.onReceive(ForceOfflineReceiver.java:37) at android.app.ActivityThread.handleReceiver(ActivityThread.java:2725) at android.app.ActivityThread.-wrap14(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1421) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method)
恰巧手机刷了6.0原声的包,模拟器也是自动下载的6.0,所以当时毫无头绪,调试了好久都没有解决。
再加之有个同学用的6.0的miui运行也没有见到问题,就没有考虑是安卓版本搞的鬼。
后来爬帖子过程中,还是发现6.0权限请求方式发生了变化。
可惜本人英文太渣,刚开始没看懂,后来动手搞了搞,终于解决了这个问题。
在Activity.java中加入请求的代码,这里权限是解决了AlertDialog弹窗的问题。
private static final int REQUEST_CODE = 1; private void requestAlertWindowPermission() { Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION); intent.setData(Uri.parse("package:" + getPackageName())); startActivityForResult(intent, REQUEST_CODE); } @TargetApi(Build.VERSION_CODES.M) @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_CODE) { if (Settings.canDrawOverlays(this)) { Log.i("permission", "onActivityResult granted"); } } }
之后在初始化函数中调用请求权限函数
requestAlertWindowPermission即可
参考链接:
stackoverflow
聊一聊Android 6.0的运行时权限
相关文章推荐
- Android中View的绘制
- 单独编译Android源码的模块。
- Android Studio 2.0 功能介绍
- android studio 错误:“java.io.EOFException”
- Android Service
- Android——用Activity和Service实现简单的音乐播放器
- Android自定义控件:仿美团下拉菜单及相关代码优化
- Android多线程与线程池
- android-单元测试(Android JUnit Test)
- 2016.4.23 低空贴近零基础开发Android遇到的问题(一)
- Android图片选择器、多选框架
- android Intent 理解
- Android自定义控件:时间滚轮控件的绘制
- Android 富有动感的底部弹出框
- Android实现透明状态栏
- Android下编译ffmpeg
- Xamarin.Android之Spinner的简单探讨
- 解决android Button 自带阴影的效果
- android-向读写sdcard
- Android项目开发填坑记-Fragment的onBackPressed