好吧,这是关于运行时权限,所以只声明他们在清单中将无法正常工作。相反,您必须在开始通话之前检查权限。
像这样的东西应该工作 - 用户将仅会要求许可,如果他以前没有授予它(或他是否撤销的话):
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;
}
}
}
我把上面的代码主要来自谷歌: http://developer.android.com/training/permissions/requesting.html 如果您想了解更多信息,请访问链接。
编辑: onRequestPermissionsResult
将在您的活动中成为回调函数。您可能需要在那里处理电话。
这是关于运行时权限,不是吗? –
@JörnBuitink是的! – Dinuka