设为首页 - 加入收藏 邢台站长网 (http://www.0319zz.com)- 国内知名站长资讯网站,提供最新最全的站长资讯,创业经验,网站建设等!
热搜: 2018 终端 移动 司机
当前位置: 首页 > 狗万赢钱多久到账 > 评论 > 正文

Android中的权限问题

发布时间:2019-10-22 11:35 所属栏目:[评论] 来源:Growup
导读:在Android程序中,在执行形如访问网络、读取联系人时都要声明权限,在 Android 系统版本小于6.0时,所有的权限只需要在AndroidManifest文件中声明就可以使用对应的功能了。 但是在Android6.0版本以上,Android将权限分为了普通权限和危险权限,其中普通权

在Android程序中,在执行形如访问网络、读取联系人时都要声明权限,在 Android 系统版本小于6.0时,所有的权限只需要在AndroidManifest文件中声明就可以使用对应的功能了。 但是在Android6.0版本以上,Android将权限分为了普通权限和危险权限,其中普通权限的使用和以前的Android版本一样,直接在AndroidManifest文件中声明就行了,系统会自动帮我们授权,但是危险权限不仅要在AndroidManifest文件中声明,还需要在使用权限的时候通过代码来判断用户授权并且对用户授权的结果进行对应的处理。那么哪些权限是危险权限呢,下面给出了Android所有的危险权限,那么除了下表中的危险权限,其它的权限就都是Android普通权限了:

我们可以通过权限组的方式大致记一下危险权限:

  1. 读写日历:android.permission.READ_CALENDAR android.permission.WRITE_CALENDAR
  2. 使用相机: android.permission.CAMERA
  3. 读写联系人:android.permission.READ_CONTACTS android.permission.WRITE_CONTACTS
  • android.permission.GET_ACCOUNTS
  1. 位置服务:android.permission.ACCESS_FINE_LOCATION ACCESS_COARSE_LOCATION
  2. 电话:android.permission.READ_PHONE_STATE android.permission.CALL_PHONE android.permission.READ_CALL_LOG android.permission.WRITE_CALL_LOG android.permission.ADD_VOICEMAIL android.permission.USE_SIP android.permission.PROGRESS_OUTGOING_CALLS
  3. 使用传感器:android.permission.BODY_SENSORS
  4. 短信:android.permission.SEND_SMS android.permission.RECEIVE_SMS android.permission.READ_SMS android.permission.RECEIVE_WAP_PUSH RECEIVE_MMS
  5. 读写手机储存:android.permission.READ_EXTERNAL_STORAGE android.permission.WRITE_EXTERNAL_STORAGE

好了,以上就是Android的所有危险权限,我们在使用这些权限的时候不仅要在AndroidManifest文件中声明,还需要在代码中对用户的授权情况进行处理,下面以一个简单的例子来看一下如何在代码中处理危险权限:

新建一个Android工程:

activity_main.xml:

  1. ?
  2. ?xmlns:tools="http://schemas.android.com/tools"?
  3. ?android:id="@+id/activity_main"?
  4. ?android:layout_width="match_parent"?
  5. ?android:layout_height="match_parent"?
  6. ?android:orientation="vertical"?
  7. ?android:gravity="center_horizontal"?
  8. ?tools:context="com.example.administrator.blogandroidpermissiondeal.MainActivity">?
  9. ?<>
  10. ?android:id="@+id/phonenumberEditText"?
  11. ?android:layout_width="wrap_content"?
  12. ?android:layout_height="wrap_content"?
  13. ?android:hint="输入你想拨打的电话号码"?/>?
  14. ?<>
  15. ?android:id="@+id/callPhoneButton"?
  16. ?android:layout_width="wrap_content"?
  17. ?android:layout_height="wrap_content"?
  18. ?android:text="拨打"/>?
  19. ?

很简单的布局文件,一行EditText控件用于,电话号码,一行Button用于拨打电话::

接下来是MainActivity.java:

  1. package?com.example.administrator.blogandroidpermissiondeal;?
  2. import?android.Manifest;?
  3. import?android.content.Intent;?
  4. import?android.content.pm.PackageManager;?
  5. import?android.net.Uri;?
  6. import?android.support.annotation.NonNull;?
  7. import?android.support.v4.app.ActivityCompat;?
  8. import?android.support.v4.content.ContextCompat;?
  9. import?android.support.v7.app.AppCompatActivity;?
  10. import?android.os.Bundle;?
  11. import?android.view.View;?
  12. import?android.widget.Button;?
  13. import?android.widget.EditText;?
  14. import?android.widget.Toast;?
  15. public?class?MainActivity?extends?AppCompatActivity?{?
  16. ?private?Button?button?=?null;?
  17. ?private?EditText?editText?=?null;?
  18. ?private?static?final?int?PERMISSION_REQUEST_CODE?=?1;?
  19. ?@Override?
  20. ?protected?void?onCreate(Bundle?savedInstanceState)?{?
  21. ?super.onCreate(savedInstanceState);?
  22. ?setContentView(R.layout.activity_main);?
  23. ?editText?=?(EditText)?findViewById(R.id.phonenumberEditText);?
  24. ?button?=?(Button)?findViewById(R.id.callPhoneButton);?
  25. ?button.setOnClickListener(new?View.OnClickListener()?{?
  26. ?@Override?
  27. ?public?void?onClick(View?v)?{?
  28. ?/*?
  29. ?*?先判断用户以前有没有对我们的应用程序允许过打电话的权限,?
  30. ?*?如果有,那么直接打电话,如果没有,那么向用户申请,并且回调onRequestPermissionResult方法?
  31. ?*/?
  32. ?if(ContextCompat.checkSelfPermission(MainActivity.this,?Manifest.permission.CALL_PHONE)?
  33. ?!=?PackageManager.PERMISSION_GRANTED)?{?
  34. ?/*?
  35. ?*?下面是对权限进行申请,第二个参数填入权限名,如果有多个权限,那么第二个参数String数组加入多个权限参数?
  36. ?*/?
  37. ?ActivityCompat.requestPermissions(MainActivity.this,?
  38. ?new?String[]{Manifest.permission.CALL_PHONE},?PERMISSION_REQUEST_CODE);?
  39. ?}?else?{?
  40. ?callPhonenumber();?
  41. ?}?
  42. ?}?
  43. ?});?
  44. ?}?
  45. ?private?void?callPhonenumber()?{?
  46. ?try?{?
  47. ?Intent?intent?=?new?Intent(Intent.ACTION_CALL);?
  48. ?intent.setData(Uri.parse("tel:"?+?editText.getText().toString()));?
  49. ?startActivity(intent);?
  50. ?}catch?(Exception?e)?{?
  51. ?e.printStackTrace();?
  52. ?}?
  53. ?}?
  54. ?/*?
  55. ?*?当我们向用户申请权限的时候,用户操作的结果会调用这个方法,无论用户允许或者禁止,?
  56. ?*?我们要在这个方法里面做出对应的处理?
  57. ?*/?
  58. ?@Override?
  59. ?public?void?onRequestPermissionsResult(int?requestCode,?@NonNull?String[]?permissions,?@NonNull?int[]?grantResults)?{?
  60. ?super.onRequestPermissionsResult(requestCode,?permissions,?grantResults);?
  61. ?switch?(requestCode)?{?
  62. ?/*?
  63. ?*?对传入的requestCode进行判断?
  64. ?*/?
  65. ?case?PERMISSION_REQUEST_CODE:?
  66. ?//?如果用户授权?
  67. ?if(grantResults.length?>?0?&&?grantResults[0]?==?PackageManager.PERMISSION_GRANTED)?{?
  68. ?callPhonenumber();?
  69. ?}?else?{?
  70. ?Toast.makeText(this,?"打电话权限已被用户拒绝",?Toast.LENGTH_SHORT).show();?
  71. ?}?
  72. ?}?
  73. ?}?
  74. }?

在MainActivity.java中我们对我们需要的权限进行了处理,

【免责声明】本站内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

网友评论
推荐文章