Android6.0【运行时申请权限】的分析
来源:互联网 发布:淘宝新店能做什么活动 编辑:程序博客网 时间:2024/06/05 14:16
,#情景:
Android 6.0之后。
用法:
普通权限在清单文件中添加,危险权限需要动态申请权限。
例子:
比如开发中的,SD卡权限的申请,电话的权限,以及读取联系人等方面的权限申请。
如:
Intent.ACTION_DIAL,表示开拨号界面,不需要声明权限。Intent.ACTION_CALL,是系统内置直接打电话动作,需要声明权限。
代码如下(清单文件也要注明权限CALL_PHONE):
/* * Copyright (C) 2016, TP-LINK TECHNOLOGIES CO., LTD. * * MainCallActivity.java * * Description * * Author nongzhanfei * * Ver 1.0, 12/25/16, NongZhanfei, Create file */package com.tplink.callphone;import android.Manifest;import android.content.Intent;import android.content.pm.PackageManager;import android.net.Uri;import android.os.Bundle;import android.support.annotation.NonNull;import android.support.annotation.Nullable;import android.support.v4.app.ActivityCompat;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.Button;import android.widget.Toast;public class MainCallActivity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button btnMakeCall = (Button) findViewById(R.id.make_call); btnMakeCall.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //进来就检查请求的权限是否被授权了,还未被授权就请求权限。 if (ActivityCompat.checkSelfPermission(MainCallActivity.this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) { requestCallPermission(); } else { //同意则拨打电话 makeCall(); } } private void requestCallPermission() { //请求的权限的数量(可多个),请求码,(便于区分不同时机的不同的权限请求)。 requestPermissions(new String[]{Manifest.permission.CALL_PHONE}, 1); } }); } private void makeCall() { try { //普通模式-直接拨打 Intent intent = new Intent(Intent.ACTION_CALL); //普通电话 intent.setData(Uri.parse("tel:10086"));//如果想直接拨打110需要紧急模式,否这弹出拨号键盘 startActivity(intent); } catch (SecurityException e) { e.printStackTrace(); } } @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] == getPackageManager().PERMISSION_GRANTED) { makeCall(); } else { Toast.makeText(this, "yout denied the permission", Toast.LENGTH_SHORT).show(); } break; default: break; } }}
拓展:
如果把10086改成110,那么就不会自动拨号了,只会弹出拨号界面,因为ACTION_CALL代表普通拨号。
Intent intent = new Intent(Intent.ACTION_CALL); intent.setData(Uri.parse("tel:10086")); startActivity(intent);
所以需要注意以下信息:
系统拨打电话可以调用action如下:
ACTION_CALL(普通),
ACTION_CALL_EMERGENCY (紧急电话),
ACTION_CALL_PRIVILEGED(系统专属),
而普通应用要拨打电话只能调用ACTION_CALL。
0 0
- Android6.0【运行时申请权限】的分析
- Android6.0运行时权限申请
- Android6.0运行时权限申请
- Android6.0及以上运行时权限申请
- 关于android6.0运行时权限申请小结
- android6.0程序在运行时申请权限
- Android6.0 Marshmallow运行时权限申请框架
- android6.x运行时权限申请管理
- Android6.0权限申请
- Android6.0权限申请
- android6.0权限申请
- Android6.0权限申请
- Android6.0权限申请
- Android6.0权限申请
- Android6.0权限申请
- Android6.0+权限申请
- Android6.0运行时权限的封装
- Android6.0运行时权限的处理
- php中在类中使用静态方法的几种方式
- XML解析笔记
- Java发送邮件实例
- 手写数字识别的全栈尝试
- java 集合学习笔记1-Collection 集合遍历 List子类特点
- Android6.0【运行时申请权限】的分析
- Codeforces 268D
- 从零开始做远控 第十二篇 命令行控制
- 3 对象的共享
- 深入SpringMVC
- linux的nohup命令的用法
- Java并发编程:volatile关键字解析
- pat-a1033. To Fill or Not to Fill (25)
- 【Spring】Spring AOP实现原理