我知道这样做非常简单,但我遇到了一个非常奇怪的问题。我只需点击一下按钮就可以打电话给处于危险状态的警察。所以我使用了以下代码来调用。
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而不是直接打电话。我想在用户点击按钮时立即发生这种情况。
当我试图在100之前放置+91时,它会自动调用该号码,但为什么这些号码需要加号。所以有人帮我解决了这个问题
答案 0 :(得分:4)
来自ACTION_CALL
的文档:
注意:对哪些应用程序可以发起呼叫有限制;大多数应用程序应使用ACTION_DIAL。
注意:此Intent不能用于拨打紧急号码。但是,应用程序可以使用ACTION_DIAL拨打紧急号码。
所以看来这种行为是故意的。
答案 1 :(得分: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;
}
答案 2 :(得分:0)
private void phoneCall()
{
String phoneCallUri = "tel:91";
Intent phoneCallIntent = new Intent(Intent.ACTION_CALL);
phoneCallIntent.setData(Uri.parse(phoneCallUri));
startActivity(phoneCallIntent);
}
答案 3 :(得分:0)
无需用户干预即可直接致电的最佳方式..
String uri = "tel:" + num.trim();
Intent intent = new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse(uri));
startActivity(intent);
答案 4 :(得分:0)
调用/开始调用有两种意图:ACTION_CALL和ACTION_DIAL。 ACTION_DIAL仅打开拨打号码的拨号器,但允许用户实际呼叫或拒绝呼叫。 ACTION_CALL将立即拨打该号码并需要额外的许可。 因此,请确保您拥有权限
答案 5 :(得分:0)
很长一段时间过去了。但可能会帮助别人。 如果您想直接致电,则应使用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);
}
}
}
当用户授予权限时,下次没有对话框,将直接拨打电话。