山东青岛电脑学校 专业软件工程师培训,软件人才就业实训中心0532-85025005

Android 6.0动态权限大总结

 

6.0动态权限这个问题,面试官很喜欢问这个。还有5.0、7.0新特性。
22以前的api,都是在AndroidManifest文件中注册权限即可,用户在安装apk的时候会有权限提示,但是哪个用户会看呢?google为了提高用户的安全性,在23(6.0)以后,app使用某一个敏感操作时,还需要用户的允许才行,否则这个功能无法使用。
动态权限就这么回事。

 

先贴一下我的工具类吧:

 


[java] view plain copy print?
/** 
 * @Author: duke 
 * @DateTime: 2017-03-30 15:51 
 * @Description: 权限检测工具类 
 */  
public class PermissionManager {  
  
    private PermissionManager() {  
    }  
  
    /** 
     * 是否需要动态申请权限 <br/> 
     * 
     * @return 需要:true,不需要:false 
     */  
    public static final boolean isNeedDynamicPermissions() {  
        //if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {}  
        if (Build.VERSION.SDK_INT >= 23) {  
            // 23 (Android 6.0)以上  
            return true;  
        }  
        return false;  
    }  
  
    /** 
     * 向用户弹出解释对话框 <br/> 
     * ******************************************************************************* 
     * ** 应用安装后第一次访问,直接返回false;                                     ** 
     * ** 第一次请求权限时用户拒绝了,下一次返回 true,                             ** 
     * ** 这时候可以显示一些为什么需要这个权限的说明;                              ** 
     * ** 第二次请求权限时,用户拒绝了,并选择了“不再提醒”的选项时,返回 false;  ** 
     * ** 设备的系统设置中禁止当前应用获取这个权限的授权,返回false;             ** 
     * ** 注意:第二次请求权限时,才会有“不再提醒”的选项,                        ** 
     * ** 如果用户一直拒绝,并没有选择“不再提醒”的选项,                          ** 
     * ** 下次请求权限时,会继续有“不再提醒”的选项,并且会一直返回true            ** 
     * ******************************************************************************* 
     * 
     * @param activity   上下文 
     * @param permission 需要提示解释的权限申请 
     * @return 需要提示:true,不需要:false 
     */  
    public static final boolean shouldShowRequestPermissionRationale(Activity activity, String permission) {  
        return ActivityCompat.shouldShowRequestPermissionRationale(activity, permission);  
    }  
  
    /** 
     * 检查当前是否已被赋予权限 <br/> 
     * 
     * @param context     上下文 
     * @param permissions 待判断权限集合 
     * @return 授权:true,缺少授权:false 
     */  
    public static final boolean checkSelfPermission(Context context, String... permissions) {  
        if (null == permissions || permissions.length == 0) {  
            return false;  
        }  
        for (String permission : permissions) {  
            if (TextUtils.isEmpty(permission)) {  
                return false;  
            }  
            /** 
             * 检测权限核心方法 
             */  
            if (ContextCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_DENIED) {  
                //如果其中某一个未授权  
                return false;  
            }  
        }  
        //权限参数合法,且全部都授权过  
        return true;  
    }  
  
    /** 
     * 正式请求用户授权 <br/> 
     * 
     * @param context     activity上下文 
     * @param permissions 待权限的权限集合 
     * @param requestCode 本次授权请求码 
     */  
    public static final void requestPermissions(Activity context, String[] permissions, int requestCode) {  
        ActivityCompat.requestPermissions(context, permissions, requestCode);  
    }  
  
    /** 
     * 检查授权结果,是否为“成功授权” <br/> 
     * 
     * @param grantResults 权限结果集合 
     * @return 授权成功:true,授权失败:false 
     */  
    public static final boolean checkPermissionsResult(int[] grantResults) {  
        if (grantResults == null || grantResults.length == 0) {  
            return false;  
        }  
        for (int grantResult : grantResults) {  
            if (grantResult == PackageManager.PERMISSION_DENIED) {  
                //其中一个未授权,立即返回false授权失败  
                return false;  
            }  
        }  
        return true;  
    }  
}  

Tags:

发布: 青软IT学院 分类: 未分类 评论: 0 浏览: 8

35个Java代码性能优化总结

 

前言

代码优化,一个很重要的课题。可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是,吃的小虾米一多之后,鲸鱼就被喂饱了。代码优化也是一样,如果项目着眼于尽快无BUG上线,那么此时可以抓大放小,代码的细节可以不精打细磨;但是如果有足够的时间开发、维护代码,这时候就必须考虑每个可以优化的细节了,一个一个细小的优化点累积起来,对于代码的运行效率绝对是有提升的。

Tags:

发布: 青软IT学院 分类: 未分类 评论: 0 浏览: 3

Android应用优化之内存概念

 

导语

现在的Android智能手机发展信息万变,从一开始的HTC到小米价格战到现在高端市场份额战,在软硬件都发生了翻天覆地的变化。在硬件上内存从一开始的一两百M到现在4G。从软件上我们从一开始为了实现需求而写代码到现在为了代码更健壮、更漂亮而进行不断优化代码。这些都是Android发展的必然一步。今天我来跟大家一起分享Android内存优化的相关概念和实践。

概念


进程内存与RAM之间的关系

进程内存既是虚拟内存(或者叫逻辑内存),而程序的运行需要实实在在的内存,即物理内存(RAM),在需要的时候操作系统会将程序运行中申请的内存(虚拟内存)映射到RAM,让进程能够使用物理内存。

Tags:

发布: 青软IT学院 分类: 未分类 评论: 0 浏览: 6

我的 10 年自学编程之路

 

为什么每个人都这样匆忙?

走进任何一家书店,你都能看到诸如《24小时自学Java》这样的书,可能书名中的Java会变成C、SQL、Ruby、算法等,然后24小时会变成n天或n小时。在亚马逊高级搜索[title: teach, yourself, hours, since: 2000 ,你会发现有512种这样的书籍。排在前10位的,9个是编程类的书(还有一个是关于财务会计的)。还有多种变化,例如“学习”替换“自学”,“天”替换“小时”。

Tags:

发布: 青软IT学院 分类: 未分类 评论: 0 浏览: 13

Java中的序列化Serialable高级详解

 

引言

将 Java 对象序列化为二进制文件的 Java 序列化技术是 Java 系列技术中一个较为重要的技术点,在大部分情况下,开发人员只需要了解被序列化的类需要实现 Serializable 接口,使用 ObjectInputStream 和 ObjectOutputStream 进行对象的读写。然而在有些情况下,光知道这些还远远不够,文章列举了笔者遇到的一些真实情境,它们与 Java 序列化相关,通过分析情境出现的原因,使读者轻松牢记 Java 序列化中的一些高级认识。

Tags:

发布: 青软IT学院 分类: 未分类 评论: 0 浏览: 7

Java8新特性 - Lambda表达式

 

Lambda 表达式也称为闭包,是匿名类的简短形式。Lambda 表达式简化了单一抽象方法声明接口的使用,因此 lambda 表达式也称为功能接口。在 Java SE 7 中,单一方法接口可使用下列选项之一实现。
创建接口实现类。
创建匿名类。

可以使用 lambda 表达式实现功能接口,无需创建类或匿名类。Lambda 表达式只能用于单一方法声明接口。

Tags:

发布: 青软IT学院 分类: 未分类 评论: 0 浏览: 7

JavaScript模块化开发的那些事

 

模块化开发在编程开发中是一个非常重要的概念,一个优秀的模块化项目的后期维护成本可以大大降低。本文主要介绍了JavaScript模块化开发的那些事,文中通过一个小故事比较直观地阐述了模块化开发的过程。

小A是某个创业团队的前端工程师,负责编写项目的Javascript程序。

 

全局变量冲突

根据自己的经验,小A先把一些常用的功能抽出来,写成函数放到一个公用文件base.js中:
var _ = {
    $: function(id) { return document.getElementById(id); },
    getCookie: function(key) { ... },
    setCookie: function(key, value) { ... }
};
小A把这些函数都放在_对象内,以防过多的全局变量造成冲突。他告诉团队的其他成员,如果谁想使用这些函数,只要引入base.js就可以了。

Tags:

发布: 青软IT学院 分类: 未分类 评论: 0 浏览: 9

Java注解处理器使用详解

 

在这篇文章中,我将阐述怎样写一个注解处理器(Annotation Processor)。在这篇教程中,首先,我将向您解释什么是注解器,你可以利用这个强大的工具做什么以及不能做什么;然后,我将一步一步实现一个简单的注解器。

一些基本概念

在开始之前,我们首先申明一个非常重要的问题:我们并不讨论那些在运行时(Runtime)通过反射机制运行处理的注解,而是讨论在编译时(Compile time)处理的注解。

注解处理器是一个在javac中的,用来编译时扫描和处理的注解的工具。你可以为特定的注解,注册你自己的注解处理器。到这里,我假设你已经知道什么是注解,并且知道怎么申明的一个注解类型。如果你不熟悉注解,你可以在这官方文档中得到更多信息。注解处理器在Java 5开始就有了,但是从Java 6(2006年12月发布)开始才有可用的API。过了一些时间,Java世界才意识到注解处理器的强大作用,所以它到最近几年才流行起来。

Tags:

发布: 青软IT学院 分类: 未分类 评论: 0 浏览: 6

35 个 Java 代码性能优化总结

 

前言

代码优化,一个很重要的课题。可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是,吃的小虾米一多之后,鲸鱼就被喂饱了。代码优化也是一样,如果项目着眼于尽快无BUG上线,那么此时可以抓大放小,代码的细节可以不精打细磨;但是如果有足够的时间开发、维护代码,这时候就必须考虑每个可以优化的细节了,一个一个细小的优化点累积起来,对于代码的运行效率绝对是有提升的。

Tags:

发布: 青软IT学院 分类: 未分类 评论: 0 浏览: 6

成为Java顶尖程序员 ,看这11本书就够了

 

“学习的最好途径就是看书“,这是我自己学习并且小有了一定的积累之后的第一体会。个人认为看书有两点好处:

 
1.能出版出来的书一定是经过反复的思考、雕琢和审核的,因此从专业性的角度来说,一本好书的价值远超其他资料。 
2.对着书上的代码自己敲的时候方便 
“看完书之后再次提升自我的最好途径是看一些相关的好博文“,我个人认为这是学习的第二步,因为一本书往往有好几百页,好的博文是自己看书学习之后的一些总结和提炼,对于梳理学习的内容很有好处,当然这里不是说自己的学习方法,就不再扯下去了。 
很多程序员们往往有看书的冲动,但不知道看哪些书,下面我就给各位Java程序猿们推荐一些好书(每本书的作者会加粗标红),其中绝大多数都是我自己平时在看的书,也算是我对于平时读的书做一个小总结和读后感吧。 
目前市面上讲解设计模式的书很多,虽然我前面讲了看书是最好的,但是对设计模式感兴趣的朋友们,我推荐的是这个博客。这位博友的设计模式讲得非常非常好,我认为90%的内容都是没有问题且很值得学习的,其讲解设计模式的大体路线是: 
1、随便开篇点明该设计模式的定义 
2、图文并茂讲解该设计模式中的结构 
3、以详细的代码形式写一下该种设计模式的实现 
4、补充内容 
5、讲解该设计模式的优缺点 
对于一个设计模式我们关注、学习的知识点,不就是上面这些吗? 
不 过我要重点提醒一下网友们,同一种设计模式的写法有多种,并不是说只有按某种写法来写才是这种设计模式。比方说适配器模式,我们关注适配器模式一定要关注 的是什么是适配器模式不是怎么写适配器模式,不要认为某段代码不是按照适配器模式的写法写下来的它就不是适配器模式了,记住这一点,你在学习设计模式的时 候一定会对代码中用到的设计模式有更深入的理解。

Tags:

发布: 青软IT学院 分类: 未分类 评论: 0 浏览: 3