android 6.0及以上 运行时权限申请(动态权限申请)
2017-08-15 10:58
721 查看
转载请注明出处:http://blog.csdn.net/mr_leixiansheng/article/details/77184977
内容:进入程序时,让用户手动选择想要开启的权限步骤(打电话为例):
1、权限判断
ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED
2、权限申请
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CALL_PHONE}, 1);3、权限申请结果处理
@Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)代码如下:
布局
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:id="@+id/phone_call" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Phone Call" android:textAllCaps="false"/> </LinearLayout>主程序
package com.leixiansheng.runtimepermisssiontest; import android.Manifest; import android.content.Intent; import android.content.pm.PackageManager; import android.net.Uri; import android.support.annotation.NonNull; import android.support.v4.app.ActivityCompat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Toast; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button btnPhoneCall = (Button) findViewById(R.id.phone_call); btnPhoneCall.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //权限判断 if (ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) { //申请授权 ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CALL_PHONE}, 1); return; } else { call(); } } }); } /** * 模拟打电话(之前已经进行过权限判断,此处不必再进行判断) */ private void call() { try { Intent intent = new Intent(Intent.ACTION_CALL); intent.setData(Uri.parse("tel:10086")); startActivity(intent); } catch (Exception e) { e.printStackTrace(); } } /** *申请权限返回结果 */ @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { switch (requestCode) { case 1: if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { call(); } else { Toast.makeText(this, "Need Permission", Toast.LENGTH_SHORT).show(); } break; } } }
危险权限列表
多条权限申请处理方式
private void askPermission() { List<String> permissionList = new ArrayList<>(); if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) { permissionList.add(Manifest.permission.CALL_PHONE); } if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) { permissionList.add(Manifest.permission.READ_CONTACTS); } if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { permissionList.add(Manifest.permission.WRITE_EXTERNAL_STORAGE); } //permissionList不为空,则请求权限 if (!permissionList.isEmpty()) { String[] permissions = permissionList.toArray(new String[permissionList.size()]); ActivityCompat.requestPermissions(this, permissions,1); } }
@Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults){
switch (requestCode) {
case 1:
if (grantResults.length > 0) {
for (int result : grantResults) {
//只要需要的权限有任意个未通过,则结束活动
if (result != PackageManager.PERMISSION_GRANTED) {
Toast.makeText(this, "Need Permission", Toast.LENGTH_SHORT).show();
finish();
return;
}
}
//获取到所有需要的权限后,进行下一步
doNext();
} else {
Toast.makeText(this, "Error", Toast.LENGTH_SHORT).show();
}
break;
}
}
相关文章推荐
- Android 6.0+版本运行时权限的动态申请与主要危险权限组列举
- Android M 6.0以上 需要运行时申请的权限--easypermissions库
- [置顶] Android 6.0(API 23)及其以上动态申请的权限与申请权限的方法
- Android 6.0(API 23) 含以上 java.lang.SecurityException 权限需动态申请(危险权限)
- android拨打电话崩溃6.0以上实时动态权限申请
- Android 6.0以上动态申请文件读写权限
- Android 6.0以上 需要运行时申请的权限(一)
- Android 6.0以上 需要运行时申请的权限(二)
- android 6.0 以上如何动态申请权限?
- android 6.0动态弹框申请权限实现
- android 6.0, 7.0之动态申请权限完美解决方案
- Android 动态权限申请 (API23及以上的需求)
- Android 6.0 动态权限申请
- Android 6.0 动态申请权限
- Android 6.0动态申请权限
- Android 6.0以上动态权限备忘录
- React-Native之Android(6.0及以上)权限申请
- RxPermissions源码分析:使用RxJava处理Android 6.0运行时动态权限获取
- Android 6.0的运行时权限 批量申请
- Android 6.0+动态权限申请模板