在学习运行时权限时学到了一个向用户申请权限的方法ActivityCompat.requestPermissions(),这个方法接收三个参数,分别是Activity的实例、String数组、请求码,该方法源码定义具体如下
public static void requestPermissions(Activity activity,String[] permissions,int requestCode)
从上面我们知道这个方法的第二个参数接收是一个存放String数据类型的数组。现在我想向用户申请一个拨打电话的权限,代码如下
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button makeCall= (Button) 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()是封装好的拨打电话的方法
call();
}
}
});
}
关于其中的代码行(如下)
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CALL_PHONE},1);
我比较疑惑的是既然第二个参数传入的是字符串数组,那么为什么其中的值是直接写的Manifest.permission.CALL_PHONE
而不是加了双引号的"Manifest.permission.CALL_PHONE"
,并且我在eclipse中用Java代码试验了一下,发现在Java中,如果字符串数组中存放的值不加双引号限制为字符串是会报错的,但是在Android中好像并没有这个现象。
希望有了解的能够帮我解决这个问题,谢谢。
The reason is that there is such source code under the Manifest.permission package
As the first floor answered, don’t be fooled by appearances. Read the code carefully
You select the code you want to view, use command+B on Mac, or right-click, select Go To, and then select Declaration, it will jump to the location in the Manifest, which is essentially a String.