Android内容提供器——运行权限

少年乘勇气,百战过乌孙。这篇文章主要讲述Android内容提供器——运行权限相关的知识,希望能为你提供帮助。
程序运行是的权限分为两种,一种是普通权限,一种是危险权限。普通权限的话可以直接使用,只有危险权限需要询问用户的同意。
危险权限分组以及组内权限如下:
【Android内容提供器——运行权限】注:危险权限同一组内有一项权限被授权,则一组权限都被授权。

1 group:android.permission-group.CONTACTS 2permission:android.permission.WRITE_CONTACTS 3permission:android.permission.GET_ACCOUNTS 4permission:android.permission.READ_CONTACTS 5 6 group:android.permission-group.PHONE 7permission:android.permission.READ_CALL_LOG 8permission:android.permission.READ_PHONE_STATE 9permission:android.permission.CALL_PHONE 10permission:android.permission.WRITE_CALL_LOG 11permission:android.permission.USE_SIP 12permission:android.permission.PROCESS_OUTGOING_CALLS 13permission:com.android.voicemail.permission.ADD_VOICEMAIL 14 15 group:android.permission-group.CALENDAR 16permission:android.permission.READ_CALENDAR 17permission:android.permission.WRITE_CALENDAR 18 19 group:android.permission-group.CAMERA 20permission:android.permission.CAMERA 21 22 group:android.permission-group.SENSORS 23permission:android.permission.BODY_SENSORS 24 25 group:android.permission-group.LOCATION 26permission:android.permission.ACCESS_FINE_LOCATION 27permission:android.permission.ACCESS_COARSE_LOCATION 28 29 group:android.permission-group.STORAGE 30permission:android.permission.READ_EXTERNAL_STORAGE 31permission:android.permission.WRITE_EXTERNAL_STORAGE 32 33 group:android.permission-group.MICROPHONE 34permission:android.permission.RECORD_AUDIO 35 36 group:android.permission-group.SMS 37permission:android.permission.READ_SMS 38permission:android.permission.RECEIVE_WAP_PUSH 39permission:android.permission.RECEIVE_MMS 40permission:android.permission.RECEIVE_SMS 41permission:android.permission.SEND_SMS 42permission:android.permission.READ_CELL_BROADCASTS

申请权限:
以获取拨打电话call权限为例。
首先在 AndroidManifest.xml 文件中声明所需的权限:
< uses-permission android:name="android.permission.CALL_PHONE"/>

在布局文件中设置一个按钮,然后在MainActivity中编写相关申请权限的逻辑。
申请主要分三个部分:
1.设置按钮点击事件,通过checkSelfPermission方法来判断是否有相关权限,如果没有权限,则调用requestPermissions方法来询问用户是否授权,如果有权限,则直接调用call()来进行执行。
2.在第一步调用完requestPermissions方法后,无论用户选择授权与否,都会回调到onRequestPermissionsResult()方法中,授权结果封装在grantResults参数中,所以判断授权结果,如果授权同意,则调用call方法,不同意则提示未获得授权。
3.call方法具体,使用隐身intent方法,动作为拨打电话,并设置相应电话号码,执行intent动作。为了防止程序奔溃,这些放在try方法里执行。
代码如下:
1 public class MainActivity extends AppCompatActivity { 2 3@Override 4protected void onCreate(Bundle savedInstanceState) { 5super.onCreate(savedInstanceState); 6setContentView(R.layout.activity_main); 7 8/*设置按钮点击事件,通过checkSelfPermission方法来判断是否有相关权限 9* 如果没有权限,则调用requestPermissions方法来询问用户是否授权 10* 如果有权限,则直接调用call()来进行执行*/ 11Button makeCall = (Button) findViewById(R.id.make_call); 12makeCall.setOnClickListener(new View.OnClickListener() { 13@Override 14public void onClick(View view) { 15/*该方法传入两个参数,第一个是context,第二个是要获得的权限名。 16将返回值与PackageManager.PERMISSION_GRANTED做比较*/ 17if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE) 18!= PackageManager.PERMISSION_GRANTED) { 19/*为获得授权,调用requestPermissions方法向用户申请授权, 20传入三个参数:context,获得的权限名字符串,以及请求码,唯一值即可。*/ 21ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CALL_PHONE}, 1); 22} else { 23call(); 24} 25} 26}); 27} 28 29/*call方法具体,使用隐身intent方法,动作为拨打电话,并设置相应电话号码,执行intent动作。 30* 为了防止程序奔溃,这些放在try方法里执行。*/ 31private void call() { 32try { 33Intent intent = new Intent(Intent.ACTION_CALL); 34intent.setData(Uri.parse("tel:10086")); 35startActivity(intent); 36} catch (SecurityException e) { 37e.printStackTrace(); 38} 39} 40 41@Override 42public void onRequestPermissionsResult(int requestCode, String[] permissions, 43int[] grantResults) { 44switch (requestCode) { 45case 1: 46if (grantResults.length > 0 & & grantResults[0] == PackageManager.PERMISSION_GRANTED) { 47call(); 48} else { 49Toast.makeText(this, "you denied the permission", Toast.LENGTH_LONG).show(); 50} 51break; 52default: 53} 54} 55 }

 

    推荐阅读