美文网首页
Android 6.0 运行时权限讲解(一)

Android 6.0 运行时权限讲解(一)

作者: 冉冉升起的小太阳 | 来源:发表于2017-03-16 16:01 被阅读63次
Paste_Image.png

普通权限

举栗子:
   <uses-permission android:name="android.permission.INTERNET"/> 

危险权限

举个栗子:
    <!--相机-->
    <uses-permission android:name="android.permission.CAMERA"/>
    <!--发短信-->
    <uses-permission android:name="android.permission.SEND_SMS"/>

罗列危险权限 用时查看就好

日历数据
android.permission-group.CALENDAR    
android.permission.READ_CALENDAR
android.permission.WRITE_CALENDAR
相机
android.permission-group.CAMERA    
android.permission.CAMERA
联系人
android.permission-group.CONTACTS    
android.permission.READ_CONTACTS
android.permission.WRITE_CONTACTS
android.permission.GET_ACCOUNTS
位置
android.permission-group.LOCATION    
android.permission.ACCESS_FINE_LOCATION
android.permission.ACCESS_COARSE_LOCATION
麦克风
android.permission-group.MICROPHONE    
android.permission.RECORD_AUDIO
电话
android.permission-group.PHONE    
android.permission.READ_PHONE_STATE
android.permission.CALL_PHONE
android.permission.READ_CALL_LOG
android.permission.WRITE_CALL_LOG
com.android.voicemail.permission.ADD_VOICEMAIL
android.permission.USE_SIP
android.permission.PROCESS_OUTGOING_CALLS
传感器
android.permission-group.SENSORS    
android.permission.BODY_SENSORS
短信
android.permission-group.SMS    
android.permission.SEND_SMS
android.permission.RECEIVE_SMS
android.permission.READ_SMS
android.permission.RECEIVE_WAP_PUSH
android.permission.RECEIVE_MMS
android.permission.READ_CELL_BROADCASTS
存储
android.permission-group.STORAGE    
android.permission.READ_EXTERNAL_STORAGE
android.permission.WRITE_EXTERNAL_STORAGE

开启实战

//拨打电话代码
    public void click(View view){
        Intent intent = new Intent(Intent.ACTION_CALL);
        intent.setData(Uri.parse("1234567890"));
        startActivity(intent);
    }

注意:

a)
 minSdkVersion 16
 targetSdkVersion 21
//现在是5.0指定的系统 那么现在要执行拨打电话是可以通过的
b)
//从低版本升级到 6.0系统 没有卸载
 minSdkVersion 16
 targetSdkVersion 23
//现在是6.0指定的系统 那么现在要执行拨打电话是可以通过的 
//问题来了 为什么升级到6.0还可以拨打电话呢!
//因为 你是从5.0升级到6.0版本系统默认为你已经 勾选权限了。所以要卸载后从新安装

卸载安装后再次运行Log截图

Paste_Image.png

简单写法

public class MainActivity extends AppCompatActivity {
    private static final String TAG = "fenglang";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void click(View view) {
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) { //判断权限是否被申请
            /**
             * 第一个参数是  activity 实例
             * 第二个参数是  premission[] 数组
             * 第三个参数是  requestCode: 请求的参数
             */
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CALL_PHONE}, 1);
        } else {
            mackCall();
        }
    }

    /**
     * 拨打电话
     */
    private void mackCall() {
        try {
            Intent intent = new Intent(Intent.ACTION_CALL);
            intent.setData(Uri.parse("1234567890"));
            startActivity(intent);
        } catch (SecurityException e) {
            e.printStackTrace();
        }
    }

    /**
     *
     * @param requestCode 请求参数 对应上面 1
     * @param permissions 请求的权限 对应上面的 Manifest.permission.CALL_PHONE
     * @param grantResults 返回的结果 有两个结果  # 0 PERMISSION_GRANTED 同意授权  # -1 PERMISSION_DENIED 取消授权
     */
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode) {
            case 1:
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    Log.e(TAG, "onRequestPermissionsResult:  同意权限申请");
                    mackCall();
                } else {
                    Log.e(TAG, "onRequestPermissionsResult:  不同意权限申请");
                }
                break;
            default:

                break;

        }
    }
}
Paste_Image.png

多个权限

 public class MainActivity extends AppCompatActivity {
    private static final String TAG = "fenglang";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    /**
     * 一次授权多个权限
     * 有几个权限就需要if 判断几次 
     */
    public void  permissionsClick(){
        List<String> permissionList = new ArrayList<>();
        //拨打电话权限
        if(ContextCompat.checkSelfPermission(this,Manifest.permission.CALL_PHONE ) != PackageManager.PERMISSION_GRANTED ){
        permissionList.add(Manifest.permission.CALL_PHONE);
        }
        //访问sd卡权限
        if(ContextCompat.checkSelfPermission(this,Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){
            permissionList.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
        }
        if (permissionList.isEmpty()) {
            ActivityCompat.requestPermissions(this, permissionList.toArray(new String[permissionList.size()]), 1);
        }else {
            Log.e(TAG, "权限授权了,可以啪啪了" );
        }

    }

    /**
     *
     * @param requestCode 请求参数 对应上面 1
     * @param permissions 请求的权限 对应上面的 Manifest.permission.CALL_PHONE
     * @param grantResults 返回的结果 有两个结果  # 0 PERMISSION_GRANTED 同意授权  # -1 PERMISSION_DENIED 取消授权
     */
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode){
            case 1:
                if (grantResults.length > 0){
                    for (int grantResult : grantResults){
                        Log.e(TAG, "onRequestPermissionsResult: 某个权限被拒绝了" );
                        return;
                    }
                }else{
                    Log.e(TAG, "onRequestPermissionsResult: 所有权限通过" );
                //相应的操作
                }
                break;
        }
    }
}

注意 配置文件一定要写

    <uses-permission android:name="android.permission.INTERNET"/>
    <!--相机-->
    <uses-permission android:name="android.permission.CAMERA"/>
    <!--发短信-->
    <uses-permission android:name="android.permission.SEND_SMS"/>
    <!--打电话-->
    <uses-permission android:name="android.permission.CALL_PHONE"/>
    <!--访问SD卡-->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

小节

很多人认为访问SD卡是一个很正常权限,那么 这么平常权限,我不想写,还想用那怎么写的

Paste_Image.png

SD卡路径: Android/data/com.baidu.mm/cache

     //文件属于缓存文件 会清理软件当做垃圾给清理
        File file =  getExternalCacheDir();
        file.getPath();
        // # 给一个""空是在file 下操作 如果给了 "abc" 就会在file/abc 文件操作
        File files = getExternalFilesDir("");

相关文章

网友评论

      本文标题:Android 6.0 运行时权限讲解(一)

      本文链接:https://www.haomeiwen.com/subject/zlndnttx.html