我想点击菜单中的按钮拨打电话。 该操作有效,但不正确,因为当我点击按钮开始一个空白页面时,当我点击后退按钮时,呼叫开始了!我没有找到错误,你能帮助我吗?
这是我的代码:
/*Fare una telefonata*/
private void onCall() {
int permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE);
if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(
this,
new String[]{Manifest.permission.CALL_PHONE},
123);
} else {
startActivity(new Intent(Intent.ACTION_CALL).setData(Uri.parse("tel:3314617839")));
}
}
/*Dopo il risulato della richiesta di permesso*/
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case 123:
if ((grantResults.length > 0) && (grantResults[0] == PackageManager.PERMISSION_GRANTED)) {
onCall();
} else {
Log.d("TAG", "Call Permission Not Granted");
}
break;
default:
break;
}
}
按钮是:
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
int id=item.getItemId();
switch(id)
{
case R.id.ContConc:
onCall();
我已经获得了清单的许可,事实上这个电话已经开始了,但我认为可能存在多余的问题,我真的不知道!
答案 0 :(得分:1)
我强烈建议您使用ACTION_DIAL,它会为您节省所有请求权限的事项:
public static void dialNumber(Context context, String number) {
Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:" + number));
context.startActivity(intent);
}
但如果你真的想打电话,你需要做更多的工作,除非你的 targetSdkVersion低于23.对于23及更高版本,您需要实现Permission handler。然后你可以使用像这样的方法:
public static void callNumber(Context context, String number){
Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:"+ number));
if (ActivityCompat.checkSelfPermission(context, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
return;
}
context.startActivity(callIntent);
}
答案 1 :(得分:1)
我以前做过同样的事情,这对我来说也不起作用所以我最终做到了这一点:
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
int id=item.getItemId();
switch(id)
{
case R.id.ContConc:
public void onClick(View v) {
String number = "+31612345678";
Uri call = Uri.parse("tel:" + number);
Intent call = new Intent(Intent.ACTION_DIAL, call);
startActivity(call);
它与您想要的完全不同,因为这会将您带到您在数字变量中输入的电话号码的来电应用程序。
您也不必征得许可
希望这有帮助!