作家
登录

程序猿如何从产品的角度去提升应用的体验之Android权限优化篇

作者: 来源: 2017-07-26 15:17:21 阅读 我要评论

  •         throw e.rethrowFromSystemServer(); 
  •     } 
  •  
  • 这种反射的方法实际上就是经由过程AppOpsManager和AppOpsService去获取位于/data/system/目次下的文件Appops.xml里的数据。所以,这个体系源率攀里的办法可以零丁采掏出来作为一个通用的检测通知权限状况的办法。有关AppOpsManager,这里先不做展开,等下在1.4章节零丁说一下。

    当应用这个办法的时刻,在6.0以下的手机,一般调用 Camera.open()办法,如不雅相机权限没打开,会先弹出相机权限申请弹框。如不雅点击许可,那么该办法就会返回true,点击禁止则返回false。这里须要指出的是,如不雅你应用相机的方法是经由过程Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE)来跳转到体系的相机界面的话,那么即使应用的相机权限被禁止了,也照样可以正常应用相机来拍┞氛的。这种情况下要不要做权限检查,就看小我的看法了。

    1.2 引导用户跳转到通知权限设置界面

    华为手机的推送中间

    既然已经能检测到应用的通知权限状况,当应用的通知权限被禁止的时刻,应当出现提示告诉用户通知在应用中起到的感化,并引导用户去打开通知权限。以下为跳转到通知权限设置的通用办法:

    1. public void toNotificationSetting() {    if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
    2.         Intent intent = new Intent(); 
    3.         intent.setAction("android.settings.APP_NOTIFICATION_SETTINGS"); 
    4.         intent.putExtra("app_package", this.getPackageName()); 
    5.         intent.putExtra("app_uid", this.getApplicationInfo().uid); 
    6.         startActivity(intent); 
    7.     } else if (android.os.Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT) { 
    8.         Intent intent = new Intent(); 
    9.         intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); 
    10.         intent.addCategory(Intent.CATEGORY_DEFAULT); 
    11.         intent.setData(Uri.parse("package:" + this.getPackageName())); 
    12.         startActivity(intent); 
    13.     } 
    14.  

    1.3 当通知权限被封闭后,Toast可能无法正常工作的问题

    固然跟通知权限的优化没什么关系,不过在这里照样要提一下。这个是在调研通知权限优化问题的时刻有时发明的坑:在大年夜部分的机型上,当应用的通知权限被封闭后,体系的 Toast会直接无法正常工作。

    以下是我测试过的数据:

    可以看出,这个坑影响的机型范围照样挺大年夜的。为什么会如许呢?

    查阅源码后可以发明 Toast 里也用到了NotificationManagerService。在Toast履行show()办法后,履行到enqueueToast()的时刻如下:

    1. if (ENABLE_BLOCKED_TOASTS && !noteNotificationOp(pkg, Binder.getCallingUid())) {    if (!isSystemToast) { 
    2.         Slog.e(TAG, "Suppressing toast from package " + pkg + " by user request.");        return
    3.     } 
    4.  

    本来这里也用到了检测通知权限的办法noteNotificationOp()。如不雅通知权限被禁止了,那么Toast也就无法正常工作。

    对于Android手机来说,Toast在应用中到处可见,如不雅因为通知权限导致Toast不工作那么竽暌拱响照样挺大年夜的。所以,在这里建议大年夜家寻找一下Toast的替代筹划,不要在项目中直接应用体系自带的Toast。同样的,如不雅大年夜家有什么好的解决筹划,也迎接在留言中指出来。


      推荐阅读

      现代前端开发技术栈

    这篇文┞仿将会介绍以前几年 JavaScript 开辟方面的概绫屈性成长。比来几年,应用开辟的办法论产生了翻禀赋地的变更。跟着微办事架构、云计算、单页应用和响应式设计的鼓起和成长,在包管>>>详细阅读


    本文标题:程序猿如何从产品的角度去提升应用的体验之Android权限优化篇

    地址:http://www.17bianji.com/lsqh/36417.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)