4

当我使用此代码时,首先出现带有此号码的拨号盘屏幕。

Intent dialintnt = new Intent(Intent.ACTION_DIAL,Uri.parse("tel:911"));
startActivityForResult(dialintnt, CALLING);

我不要那个屏幕。当我单击按钮直接呼叫该号码时,我想要那个。那么如何拨打电话号码onclick呢?

4

6 回答 6

6

这是不可能的。这是为了保护用户。

于 2013-04-24T07:37:52.260 回答
2

已经很久了。但可能会帮助别人。如果你想直接调用,你应该使用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:20:24.397 回答
1

答案

您将需要清单文件的添加CALL_PHONECALL_PRIVILEGED权限。

然后可以使用以下方式调用该号码:

Uri callUri = Uri.parse("tel://911");
Intent callIntent = new Intent(Intent.ACTION_CALL,callUri);
callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_NO_USER_ACTION);
startActivity(callIntent);
于 2013-04-24T07:45:23.173 回答
0

只需更改ACTION_DIALACTION_CALL.
像这样:

Intent dialintnt = new Intent(Intent.ACTION_CALL,Uri.parse("tel:911"));
startActivityForResult(dialintnt, CALLING);
于 2013-04-24T07:43:05.447 回答
0

尝试这个:

   Intent callIntent = new Intent(Intent.ACTION_CALL);
   callIntent.setData(Uri.parse("tel:" +phone_number));
   startActivity(callIntent);
于 2013-04-24T07:40:37.307 回答
0

号码必须正确格式化,就像您尝试使用国家代码一样,它将带您使用默认拨号器。当我使用号码时,我在我的应用程序上对其进行了测试,因为 198 呼叫直接发生,当我使用 9999999999 时,这将调用 dailer,以便用户可以通过添加国家代码来更正号码。

`val intent =  Intent(Intent.ACTION_CALL, Uri.parse("tel:+91987654310" ))
      intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
      startActivity(intent)`
于 2018-11-23T11:44:01.490 回答