文档章节

Android6.0-封装Permission

小树coding
 小树coding
发布于 2016/10/08 11:22
字数 233
阅读 44
收藏 0

BaseActivity 封装:

package club.iandroid.permissiondemo;

import android.content.pm.PackageManager;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;

public abstract class BaseActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    }

    /**
     * 为子类提供一个权限检查方法
     * @param permissions
     * @return
     */
    public boolean hasPermission(String... permissions){
        if(permissions==null || permissions.length==0){
            return false;
        }
        for (String permission: permissions){
            if(ContextCompat.checkSelfPermission(this, permission)
                    != PackageManager.PERMISSION_GRANTED){
                return false;
            }
        }
        return true;
    }

    /**
     * 为子类提供一个权限请求方法
     * @param requestCode
     * @param permissons
     */
    public void requestPermission(int requestCode, String... permissons){
        ActivityCompat.requestPermissions(this, permissons, requestCode);
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        switch (requestCode){
            case Constants.CALL_PHONE:
                if(grantResults[0] == PackageManager.PERMISSION_GRANTED){
                    doCallPhonePermission();
                }else {
                    //提示用户权限未被授予
                    Toast.makeText(this, "CALL_PHONE denied", Toast.LENGTH_LONG).show();
                }

                break;
            case Constants.DOWNLOAD_FILE:
                if(grantResults[0] == PackageManager.PERMISSION_GRANTED){
                    doSDCardPermission();
                }else {
                    //提示用户权限未被授予
                    Toast.makeText(this, "DOWNLOAD_FILE denied", Toast.LENGTH_LONG).show();
                }
                break;
        }
    }

    protected void doSDCardPermission(){

    }

    protected void doCallPhonePermission(){

    }



}

 

使用:

mCallView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //打电话
                if(hasPermission(Manifest.permission.CALL_PHONE)){
                    doCallPhonePermission();
                }else {
                    requestPermission(Constants.CALL_PHONE,
                            Manifest.permission.CALL_PHONE);
                }
            }
        });

 @Override
    protected void doCallPhonePermission() {
        super.doCallPhonePermission();
        try {
            Intent intent = new Intent(Intent.ACTION_CALL);
            Uri data = Uri.parse("tel:" + "10086");
            intent.setData(data);
            startActivity(intent);
        }catch (Exception e){
            e.printStackTrace();
        }
    }

 

© 著作权归作者所有

上一篇: adb压力测试实战
下一篇: Android6.0新特性
小树coding
粉丝 13
博文 118
码字总数 32893
作品 0
苏州
Android工程师
私信 提问
Vanish/RTPermission

RTPermission Android6.0 运行时权限申请工具,Android Marshmallow runtime permission utils RTPermission 想了解该项目可参考下面的博客: http://www.jianshu.com/p/1841a74543c1 http:/......

Vanish
2017/05/22
0
0
Android在sdcard创建文件失败

在android6.0或更高版本中创建文件失败,是因为设置里应用的权限没有打开的原因造成的。这个问题困扰了我两天,试了网上的各种办法,从添加权限开始一路排查,都在创建文件失败了。最后在ove...

独鸣在彼岸
2016/10/26
136
0
Android permission 工具类

一行代码搞定Android6.0动态权限授权、权限管理 引入 compile 'com.github.dfqin:grantor:2.5' https://github.com/dfqin/PermissionGrantor 声明权限 再oncreate 申请...

Jay_kyzg
2018/05/25
47
0
Android6.0动态权限适配&XMPermissions

Android6.0动态权限 简介 从 Android 6.0(API 级别 23)开始,用户开始在应用运行时向其授予权限,而不是在应用安装时授予。此方法可以简化应用安装过程,因为用户在安装或更新应用时不需要...

静默加载
2018/09/29
0
0
Android6.0到9.0的适配

Android6.0到9.0的适配爬坑总结- https://blog.csdn.net/feelinghappy/article/details/84521067 -- 在调起这个申请动态权限后,权限框刚开发就瞬间消失了; 原因是:AndroidManifest(清单文...

desaco
04/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

HashMap是如何解决冲突,扩容机制的

hashmap中的key值是唯一的,因此我们会采用数组+链接的方式解决这个问题 本思想是将所有哈希地址为i的元素构成一个称为同义词链的单链表,并将单链表的头指针存在哈希表的第i个单元中,因而查...

鬼才王
11分钟前
1
0
音乐+区块链

当加密货币在2017年第一次进入主流媒体时,大家就开始猜测这一新技术将会在哪一个领域先绽放。其中一个猜测的候选行业就是音乐产业,一个长久以来始终在等待平等的行业,有许多音乐家在苦苦挣...

汇智网教程
14分钟前
1
0
Java数据结构(下)

哈希表(Hashtable) 字典(Dictionary) 属性(Properties) 1.Hashtable(哈希表) 哈希表提供了一种在用户定义键结构的基础上来组织数据的手段。在地址列表的哈希表,选择键可以根据邮编存...

Firefly-
22分钟前
4
0
Redis的五大数据类型及常用命令

一、与数据库相关的命令 Redis启动后默认16个数据库,类似数组下表从零开始,初始默认使用零号库 切换数据库命令 select 数据库下标 查看当前数据库的key的数量 Dbsize 清空当前库 flushdb ...

慎思慎行
26分钟前
1
0
Java格式化解析时间

System.out.println(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS").format(LocalDateTime.now(ZoneOffset.UTC)));DateTimeFormatter DATE_TIME_FORMATTER = new DateTimeFormatterBu......

爱吃窝窝头
55分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部