当用户点击具有数字的TextView时,我试图基本上拨号:
number_title.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:+"+user.getTelephone()));
activity.startActivity(callIntent);
//the above line returns the warning given below
}
});
我得到的警告:
通话需要获得用户拒绝的许可。代码到 明确检查权限是否可用
我了解如果之前未授予权限,则应用需要请求权限。我的问题是,如何在拨打电话前明确请求许可?
答案 0 :(得分:2)
这只是检查权限的参考调用示例:
if(!checkSelfPermission(Manifest.permission. CALL_PHONE)==PackageManager.PERMISSION_GRANTED){
requestPermissions(this,new String {}(Manifest.permission. CALL_PHONE),INT_TO_CHECK RESULT);
}
让我知道这是否有效。
编辑:对代码进行修改以解释。
答案 1 :(得分:2)
嗯,这是关于运行时权限的,所以只在manifest中声明它们才行不通。相反,您必须在开始通话之前检查权限。
这样的事情应该有用 - 如果用户之前没有授予许可(或者如果他撤销了),则只会要求用户获得许可:
CREATE FUNCTION test_create_common_test_2() RETURNS SETOF TEXT AS $$
BEGIN
PERFORM _create_common_test('i_am_argument2');
END
$$ LANGUAGE plpgsql;
我主要从谷歌上面的代码: http://developer.android.com/training/permissions/requesting.html 如果您想了解更多信息,请访问该链接。
编辑:
private static final int MY_PERMISSIONS_REQUEST_CALL_PHONE = 1234;
public void yourfunction() {
number_title.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (ContextCompat.checkSelfPermission(thisActivity,
Manifest.permission.CALL_PHONE)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(activity,
new String[]{Manifest.permission.CALL_PHONE},
MY_PERMISSIONS_REQUEST_CALL_PHONE);
} else {
executeCall();
}
}
});
}
private void executeCall() {
// start your call here
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:+"+user.getTelephone()));
activity.startActivity(callIntent);
}
});
}
@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
switch (requestCode) {
case MY_PERMISSIONS_REQUEST_CALL_PHONE: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// permission was granted, yay!
executeCall();
} else {
// permission denied, boo! Disable the
// functionality that depends on this permission.
}
return;
}
}
}
将成为您活动中的回调函数。你可能必须在那里处理电话。
答案 2 :(得分:0)
使用它可能会起作用:
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />