普通权限
举栗子:
<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.pngSD卡路径: Android/data/com.baidu.mm/cache
//文件属于缓存文件 会清理软件当做垃圾给清理
File file = getExternalCacheDir();
file.getPath();
// # 给一个""空是在file 下操作 如果给了 "abc" 就会在file/abc 文件操作
File files = getExternalFilesDir("");
网友评论