Android运行时权限功能
Posted qq69496
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android运行时权限功能相关的知识,希望对你有一定的参考价值。
android中权限分为普通权限和危险权限,其中危险权限需要在运行时申请。下面以CALL_PHONE这个权限举例:
布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/make_call"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Make Call" />
</LinearLayout>
清单文件
<uses-permission android:name="android.permission.CALL_PHONE" />
MainActivity
public class MainActivity extends AppCompatActivity
private Button makeCall;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
makeCall = findViewById(R.id.make_call);
makeCall.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED)
ActivityCompat.requestPermissions(MainActivity.this, new String[]Manifest.permission.CALL_PHONE, 1);
else
call();
);
private void call()
try
Intent intent = new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:10086"));
startActivity(intent);
catch (SecurityException e)
e.printStackTrace();
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)
switch (requestCode)
case 1:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
call();
else
Toast.makeText(this, "You denied the permission", Toast.LENGTH_LONG).show();
break;
default:
程序中一些方法的介绍
ContextCompat.checkSelfPermission()方法用于判断是否授权,其中包含两参数,第一个参数是Context, 第二个参数是权限名。
PackageManager.PERMISSION_GRANTED常量代表已授权。
ActivityCompat.requestPermissions()方法用于请求申请权限,包含三个参数,第一个Context,第二个权限名,不过需要String数组的形式,这样就可以支持多权限申请,第三个请求码,任意唯一值即可。
当requestPermissions()方法被调用后,结果会自动传到onRequestPermissionsResult()方法。
onRequestPermissionsResult()也包含三个参数,第一个请求码,通过请求码定位到相应的requestPermissions()方法,第二个参数权限名,与requestPermissions()方法中的权限名对应,第三个参数,请求结果数组,其中每一个值对应代表权限名数组中权限的请求结果,请求成功的值为PackageManager.PERMISSION_GRANTED,请求失败为PackageManager.PERMISSION_DENIED,这样的话,数组长度代表请求权限的个数,其中对应的值可通过PERMISSION_GRANTED和PERMISSION_DENIED来判断权限请求是否成功。
以上是关于Android运行时权限功能的主要内容,如果未能解决你的问题,请参考以下文章