我想通过编程方式从我的Android应用程序定期拨打/接听电话,并从我的网络收集统计信息。所以我的应用程序会经常拨打一个号码,当电话接听时,应用程序将在几秒钟后终止呼叫。首先,我理解的代码可以使用。它将拨打和拨打我指定的号码,而不必触摸屏幕。
public class MainActivity extends AppCompatActivity {
int MY_PERMISSIONS_REQUEST_CALL_PHONE = 101;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
call();
}
private void call() {
try {
Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:2125551212"));
System.out.println("====before startActivity====");
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) !=
PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.CALL_PHONE},
MY_PERMISSIONS_REQUEST_CALL_PHONE);
return;
}
startActivity(callIntent);
System.out.println("=====getcallActivity==="+getCallingActivity());
} catch (ActivityNotFoundException e) {
Log.e("helloAndroid","Call failed",e);
}
}
}
清单有这一行:
根据我的理解,ACTION_CALL应该拨打我提供的号码,而不必按下DIAL键。但是就像ACTION_DIAL一样,它在屏幕上显示数字,然后用户必须按DIAL键才能发出呼叫。那么ACTION_DIAL和ACTION_CALL之间没有区别吗?
在阅读了一些帖子后,我了解到需要用户拨打6.0以上的权限来拨打电话(我在上面的代码中使用过)
我的问题是,如果我使用Lollipop(5.0)操作系统,那么我可以在不拨号的情况下拨打电话吗?
答案 0 :(得分:11)
<强> ACTION_DIAL
强>
在API级别1中添加
字符串ACTION_DIAL
活动操作:拨打数据指定的号码。这会显示一个UI ,其中包含拨打的号码,允许用户明确发起呼叫。
输入:如果没有,则启动空拨号程序,否则getData()
是要拨打的电话号码的URI或 tel:URI 明确的电话号码。
输出:没有。
常量值:android.intent.action.DIAL
<强> ACTION_CALL
强>
在API级别1中添加
字符串ACTION_CALL
活动操作:向数据指定的人员发送电话。
输入:如果没有,则启动空拨号器; else getData()
是要拨打的电话号码的URI或显式电话号码的tel:URI。
输出:没有。
注意强>:
ACTION_DIAL
。ACTION_DIAL
拨打紧急号码。CALL_PHONE
未授予的权限,然后尝试使用此操作
将导致 SecurityException 。 常量值:android.intent.action.CALL
所以基本上
要打开拨号器应用程序(用户必须按拨号程序应用程序内的呼叫按钮;无需其他权限),请使用:
String number = "7777777777";
Uri call = Uri.parse("tel:" + number);
Intent surf = new Intent(Intent.ACTION_DIAL, call);
startActivity(surf);
要打开拨号器应用并自动拨打电话(需要android.permission.CALL_PHONE
),然后使用:
String number = "7777777777";
Uri call = Uri.parse("tel:" + number);
Intent surf = new Intent(Intent.ACTION_CALL, call);
startActivity(surf);
答案 1 :(得分:2)
除非您是具有特殊系统权限的系统应用程序,否则您无法直接拨打电话号码。这需要您预先安装OEM,或者将其作为系统应用程序进行植根和安装。您需要使用的是android.intent.action.CALL_PRIVILEGED,并且权限是android.permission.CALL_PRIVILEGED
ACTION_CALL和ACTION_DIAL之间的区别在于拨号启动拨号器。