Android动态获取权限
android权限的变化
在Android6.0以前的版本的时候,Android的权限都是在安装的时候全部的配置完成的。然而这往往会造成一些安全的问题。
Google的解决办法:
将Android中的权限分为了两大类:
Normal:权限不会直接涉及到用户的隐私。如果你的应用在manifest清单文件中配置了此类的权限,那么系统会自动的同意。
Dangerous权限能够让应用去访问用户的隐私数据。如果你的应用在manifest中配置了此类的权限,那么久得需要用户同意此类权限。
注意:
如果你的应用需要一个dangerous权限,那么在每一次执行需要这个权限的操作时,你必须检查是否有这个权限。应用用户总是可以取消这个权限的,并不能认为一次同意永久拥有。
不管是 Normal 还是 Dangerous 权限 都需要在清单文件中进行配置
package com.example.it.android_callphone; 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; import java.net.URI;
import java.security.Permission;
import java.util.jar.Manifest; public class MainActivity extends AppCompatActivity { int REQUEST_CALL_PHONE_PERMISSION=0;
Intent intent;
EditText txtNumber;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); Button btnCall =(Button) findViewById(R.id.btnCall);
txtNumber =(EditText)findViewById(R.id.txtNumber); btnCall.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//如果有权限直接执行
if(ContextCompat.checkSelfPermission(MainActivity.this, android.Manifest.permission.CALL_PHONE)==PackageManager.PERMISSION_GRANTED){
intent = new Intent();
//添加打电话的动作
intent.setAction(Intent.ACTION_CALL);
//添加数据
String number = txtNumber.getText().toString().trim();
intent.setData(Uri.parse("tel:"+number));
startActivity(intent);
}
//如果没有权限那么申请权限
else{
ActivityCompat.requestPermissions(MainActivity.this,new String[]{android.Manifest.permission.CALL_PHONE},REQUEST_CALL_PHONE_PERMISSION);
}
}
});
} /*
* 当请求获取权限后会执行此回调方法,来执行自己的业务逻辑
* */
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if(requestCode==this.REQUEST_CALL_PHONE_PERMISSION){ if(grantResults[0]==PackageManager.PERMISSION_GRANTED){
//执行自己的业务逻辑
startActivity(intent);
}else{
Toast.makeText(this, "拒绝了权限", Toast.LENGTH_SHORT).show();
}
}
super.onRequestPermissionsResult(requestCode,permissions,grantResults);
}
}
Android动态获取权限的更多相关文章
- Android 动态申请权限问题【转】
Android 动态申请权限问题 感谢大佬:https://www.jianshu.com/p/2324a2bdb3d4 感谢大佬:https://blog.csdn.net/weixin_42910 ...
- android 6.0之后动态获取权限
Android 6.0 动态权限申请 1. 概述 Android 6.0 (API 23) 之前应用的权限在安装时全部授予,运行时应用不再需要询问用户.在 Android 6.0 或更高版本对权限 ...
- Android6.0以上系统动态获取权限
动态权限的申请方法: 1.首先,需要在AndroidManifest.xml静态申请权限,否则无法动态申请权限: <uses-permission android:name="andr ...
- android:动态申请权限(一)
环境: android版本6.0 对应SDK版本23 动态申请权限说明:所有动态申请的权限,必须在AndroidManifest.xml中进行声明 步骤 1.新建一个android工程 默认创建即可 ...
- Android6.0动态获取权限
Android6.0采用新的权限模型,只有在需要权限的时候,才告知用户是否授权,是在runtime时候授权,而不是在原来安装的时候 ,同时默认情况下每次在运行时打开页面时候,需要先检查是否有所需要的权 ...
- Android 6.0以上动态获取权限
首先在清单文件中注册 然后在MainActivity.java中将权限封装到一个String数组中 static final String[] PERMISSION = new String[]{ M ...
- QT 安卓动态获取权限
一:在AndroidManifest.xml文件中赋予相关权限 二: package ckdz.Appproject; import android.Manifest; import android. ...
- Android 动态申请权限
AndroidManifest.xml(清单文件)添加需要的权限 <uses-permission android:name="android.permission.ACCESS_CO ...
- Android 动态获取ListView的高度
public static void setListViewHeightBasedOnChildren(ListView listView) { ListAdapter listAdapter = l ...
随机推荐
- mysql、mybatis遇到问题集合
1.错误描述 使用JDBC连接MySql时出现:The server time zone value '�й���ʱ��' is unrecognized or represents more th ...
- Eclipse Neon安装指导
[下载] 前往Eclipse官网:http://www.eclipse.org/,点击DOWNLOAD: 进入下载页面后,会显示如下下载界面: 找到 Get Eclipse Neon,然后点击下面的” ...
- unity常用小知识点
感觉自己抑郁变得更严重了,超级敏感,经常想崩溃大哭,睡眠超差,实在不想药物治疗,多看看书,多约约朋友,多出去走走. 来几句鸡汤吧,人一定要活得明白一点,任何关系都不要不清不楚,说不定最后受伤的就是自个 ...
- POJ - 3020 Antenna Placement(最小覆盖路径)
---恢复内容开始--- https://vjudge.net/problem/POJ-3020 题意 *--代表城市,o--代表空地 给城市安装无线网,一个无线网最多可以覆盖两座城市,问覆盖所有城市 ...
- bzoj千题计划184:bzoj1261: [SCOI2006]zh_tree
http://www.lydsy.com/JudgeOnline/problem.php?id=1261 dp[l][r][dep] 区间[l,r]内的节点,根在dep层的最小代价 枚举根i,dp[ ...
- li分两列显示
只要控制了li的宽度,利用浮动就能实现<style type="text/css"> .my ul { width: 210px; } .my li { width: ...
- [转载]Supporting OData $inlinecount with the new Web API OData preview package
http://www.strathweb.com/2012/08/supporting-odata-inlinecount-with-the-new-web-api-odata-preview-pac ...
- 【转】如何评价 Apple 新推出的编程语言 Swift?
如何评价 Apple 新推出的编程语言 Swift? 原文地址:http://www.zhihu.com/question/24002984 评价:如果你会Objective-C,你不需要去看它. ...
- str函数
python2: a = str(unicode类对象) #str()函数如果接收的参数是unicode类,会转换为python的defaultencoding格式,所以,如果unicode类对象是汉 ...
- linux,mac安装sentry
linux,mac安装sentry 最近需要一个日志监视系统所以选择了sentry.以下是用mac安装,看需求量linux安装类似后面的文章会补充. 安装docker https://download ...