千家信息网

如何理解Android中的权限问题

发表于:2025-11-09 作者:千家信息网编辑
千家信息网最后更新 2025年11月09日,今天就跟大家聊聊有关如何理解Android中的权限问题,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。在Android程序中,在执行形如访问网络
千家信息网最后更新 2025年11月09日如何理解Android中的权限问题

今天就跟大家聊聊有关如何理解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:

     

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

接下来是MainActivity.java:

package com.example.administrator.blogandroidpermissiondeal; 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.v4.content.ContextCompat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends AppCompatActivity {  private Button button = null;  private EditText editText = null;  private static final int PERMISSION_REQUEST_CODE = 1;  @Override  protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);  editText = (EditText) findViewById(R.id.phonenumberEditText);  button = (Button) findViewById(R.id.callPhoneButton);  button.setOnClickListener(new View.OnClickListener() {  @Override  public void onClick(View v) {  /*  * 先判断用户以前有没有对我们的应用程序允许过打电话的权限,  * 如果有,那么直接打电话,如果没有,那么向用户申请,并且回调onRequestPermissionResult方法  */  if(ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE)  != PackageManager.PERMISSION_GRANTED) {  /*  * 下面是对权限进行申请,第二个参数填入权限名,如果有多个权限,那么第二个参数String数组加入多个权限参数  */  ActivityCompat.requestPermissions(MainActivity.this,  new String[]{Manifest.permission.CALL_PHONE}, PERMISSION_REQUEST_CODE);  } else {  callPhonenumber();  }  }  });  }  private void callPhonenumber() {  try {  Intent intent = new Intent(Intent.ACTION_CALL);  intent.setData(Uri.parse("tel:" + editText.getText().toString()));  startActivity(intent);  }catch (Exception e) {  e.printStackTrace();  }  }  /*  * 当我们向用户申请权限的时候,用户操作的结果会调用这个方法,无论用户允许或者禁止,  * 我们要在这个方法里面做出对应的处理  */  @Override  public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {  super.onRequestPermissionsResult(requestCode, permissions, grantResults);  switch (requestCode) {  /*  * 对传入的requestCode进行判断  */  case PERMISSION_REQUEST_CODE:  // 如果用户授权  if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {  callPhonenumber();  } else {  Toast.makeText(this, "打电话权限已被用户拒绝", Toast.LENGTH_SHORT).show();  }  }  } }

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

最后别忘了在AndroidManifest文件中声明打电话权限:

下面来运行一下:

我们输入一个号码,点击"拨打"按钮:

因为我们是第一次运行这个程序,所以用户以前并没有对我们的程序进行授权,因此出现权限申请对话框,我们点击DENY(否):

成功弹出了提示框,那么我们再试一次点击ALLOW(允许)试试:

成功的进入拨打电话的界面并且拨打我们输入的电话号码!

当我们允许了之后,那么程序以后就不需要再经过用户授权了,即可以直接拨打电话(除非用户在应用程序管理中收回了我们的打电话的权限)。

看完上述内容,你们对如何理解Android中的权限问题有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

权限 用户 危险 文件 电话 程序 处理 普通 代码 内容 参数 号码 方法 时候 版本 问题 成功 一行 多个 应用程序 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 杭州打造智慧消防软件开发 拥挤城市是用什么软件开发的 简述数据库优化方式 数据库宏打开三表 软件开发人员定级 网络安全要守护吗 网络安全大赛设计题目 湖北仓储系统管理软件开发 软件开发项目安排 安装中心管理服务器要求吗 计算机网络技术和计算机应用技术有什么区别 网络安全行为管理制度处罚原则 服务器付费安全软件哪个好 学校开展 护苗网络安全 网络安全如何安装补丁程序 温岭市网络安全宣传周启动仪式 数据库应用基础vf 数据库表之间要不要外键 农业银行软件开发笔试考什么 基础地理信息数据库包括哪些图层 杭州打造智慧消防软件开发 网络安全密码遗失 江门市五金行业erp软件开发 服务器按什么键设置u盘 天龙八部荣耀版怎么删除服务器 互联网科技类媒体有哪些 创建教师管理数据库 金融网络安全知识问答 江津软件开发品牌 台州市微助网络技术
0