加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 站长资讯 > 评论 > 正文

Android中的权限问题

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

在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. <?xml version="1.0" encoding="utf-8"?> 
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  3.  xmlns:tools="http://schemas.android.com/tools" 
  4.  android:id="@+id/activity_main" 
  5.  android:layout_width="match_parent" 
  6.  android:layout_height="match_parent" 
  7.  android:orientation="vertical" 
  8.  android:gravity="center_horizontal" 
  9.  tools:context="com.example.administrator.blogandroidpermissiondeal.MainActivity"> 
  10.  <EditText 
  11.  android:id="@+id/phonenumberEditText" 
  12.  android:layout_width="wrap_content" 
  13.  android:layout_height="wrap_content" 
  14.  android:hint="输入你想拨打的电话号码" /> 
  15.  <Button 
  16.  android:id="@+id/callPhoneButton" 
  17.  android:layout_width="wrap_content" 
  18.  android:layout_height="wrap_content" 
  19.  android:text="拨打"/> 
  20. </LinearLayout> 

很简单的布局文件,一行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.  } 

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

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读