4

我知道这样做很简单,但我遇到了一个非常奇怪的问题。只需点击一个按钮,我就必须在危险情况下报警。所以我用下面的代码来调用。

Intent callIntent = new Intent(Intent.ACTION_CALL);
            callIntent.setData(Uri.parse("tel:100"));
            callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            ctx.startActivity(callIntent);

在. CALL_PHONE_ AndroidManifest.xml问题是它在拨号盘上打开 100 但没有直接拨打电话。我希望当用户单击按钮时立即发生这种情况。

当我尝试将 +91 放在 100 之前时,它会自动呼叫该号码,但为什么这些号码需要加号。所以有人帮我解决这个问题

4

6 回答 6

4

从以下文档ACTION_CALL

注意:哪些应用可以发起呼叫会有限制;大多数应用程序应该使用 ACTION_DIAL。

注意:此 Intent 不能用于拨打紧急号码。但是,应用程序可以使用 ACTION_DIAL 拨打紧急号码。

因此,这种行为似乎是故意的。

于 2013-01-09T15:29:09.227 回答
0

可能存在android系统无法识别100为有效电话号码的问题,相反,如果您将国家代码放在其前面,则它可以正常工作。要解决此类问题,请查看此库libnhonenumber。你可以像这样使用它

public static ArrayList<String> extractPhoneNumber(String content) {

    ArrayList<String> numbers = new ArrayList<String>(0);

    PhoneNumberUtil instance = PhoneNumberUtil.getInstance();

    //Change IT with your contry code
    Iterable<PhoneNumberMatch> matches = instance.findNumbers(content, "IT");

    Iterator<PhoneNumberMatch> iterator = matches.iterator();

    while (iterator.hasNext()) {
        numbers.add(instance.format(iterator.next().number(), PhoneNumberFormat.INTERNATIONAL));
    }

    return numbers;
}
于 2013-01-09T15:26:48.370 回答
0
private void phoneCall()
{
 String phoneCallUri = "tel:91";
 Intent phoneCallIntent = new Intent(Intent.ACTION_CALL);
 phoneCallIntent.setData(Uri.parse(phoneCallUri));
 startActivity(phoneCallIntent);
}
于 2014-03-17T06:14:41.933 回答
0

无需用户干预直接调用的最佳方式..

String uri = "tel:" + num.trim();
Intent intent = new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse(uri));
startActivity(intent);
于 2014-04-15T10:52:47.417 回答
0

呼叫/开始呼叫有两种意图:ACTION_CALL 和 ACTION_DIAL。ACTION_DIAL 只会打开填写了号码的拨号器,但允许用户实际拨打或拒接电话。ACTION_CALL 将立即呼叫该号码并需要额外的权限。所以确保你有权限

于 2014-08-11T10:16:12.550 回答
0

很久过去了。但可能会帮助别人。如果你想直接调用,你应该使用requestPermissions方法。

1.将此行添加到您的清单文件中:

<uses-permission android:name="android.permission.CALL_PHONE" />

2.在activity类中定义一个类变量:

private static Intent phoneCallIntent; //If use don't need a member variable is good to use a static variable for memory performance.

3.将这些行添加到活动的onCreate方法中:

final String permissionToCall = Manifest.permission.CALL_PHONE;
//Assume that you have a phone icon.
(findViewById(R.id.menuBarPhone)).setOnClickListener(new OnClickListener(){
    public void onClick(View view) {
        phoneCallIntent = new Intent(Intent.ACTION_CALL);
        phoneCallIntent.setData(Uri.parse(getString(R.string.callNumber))); //Uri.parse("tel:your number")
        if (ActivityCompat.checkSelfPermission(MainFrame.this, permissionToCall) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(MainFrame.this, new String[]{permissionToCall}, 1);
            return;
        }
        startActivity(phoneCallIntent);
    }
});

4.点击允许按钮后立即拨打电话,覆盖onRequestPermissionsResult方法:

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults){
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if(requestCode == 1){
        final int permissionsLength = permissions.length;
        for (int i = 0; i < permissionsLength; i++) {
            if(grantResults[i] == PackageManager.PERMISSION_GRANTED){
                startActivity(phoneCallIntent);
            }
        }
    }

当用户授予权限后,下次不会出现对话框,直接拨打电话。

于 2017-06-26T13:25:09.877 回答