如何直接在Android的拨打电话(How to Make a Call directly in A

2019-07-18 01:05发布

我知道这是做的很简单,但我遇到一个很奇怪的问题。 我有只按一个按钮就打电话给警方的危险状况。 所以我用下面的代码来调用。

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。 所以有人帮助我如何来解决这个问题

Answer 1:

从文档ACTION_CALL

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

注:此意图不能用来拨打紧急电话号码。 应用程序可以通过拨打紧急ACTION_DIAL数不过来。

如此看来这种行为是故意的。



Answer 2:

有可能是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;
}


Answer 3:

private void phoneCall()
{
 String phoneCallUri = "tel:91";
 Intent phoneCallIntent = new Intent(Intent.ACTION_CALL);
 phoneCallIntent.setData(Uri.parse(phoneCallUri));
 startActivity(phoneCallIntent);
}


Answer 4:

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

String uri = "tel:" + num.trim();
Intent intent = new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse(uri));
startActivity(intent);


Answer 5:

有两种意图调用/开始打电话:ACTION_CALL和ACTION_DIAL。 ACTION_DIAL只会打开与填补了号码的拨号程序,但允许用户实际调用或拒接来电。 ACTION_CALL将立即呼叫的号码,需要额外的许可。 因此,请确保您有权限



Answer 6:

过了很久。 但是可以帮助别人。 如果您想直接打电话,你应该使用requestPermissions方法。

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

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

2.定义在活动类的类变量:

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);
            }
        }
    }

当用户赋予的权限,下一次就不会有对话框和呼叫将被直接作出。



文章来源: How to Make a Call directly in Android