我需要在我的应用程序中在后台调用,因此当用户单击按钮时,它应该开始在后台调用,用户会知道他正在调用,但他不会看到拨号器,他会看到应用程序,以通话时再现声音。
所以基本上我想要的是在不退出活动的情况下拨打电话
我尝试了一项服务,但不起作用
Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:123456789"));
startService (callIntent);
对不起我的英语
试试这个:
Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:123456789"));
startActivity(callIntent);
*注意
startActivity(callIntent)
,而不是 startService(callIntent);
。
您还可以尝试使用
ACTION_DIAL
,而不是 ACTION_CALL
。您还需要此权限,但请将其放在 AndroidManifest
: 中的应用程序标记之前
<uses-permission android:name="android.permission.CALL_PHONE" />
背后代码:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
call();
}
private void call() {
try {
Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:123456789"));
startActivity(callIntent);
} catch (ActivityNotFoundException e) {
Log.e("sample call in android", "Call failed", e);
}
}
Manifest.xml
添加..
<uses-permission android:name="android.permission.CALL_PHONE"></uses-permission>
或者,
<uses-permission android:name="android.permission.CALL_PRIVILEGED"></uses-permission>
编辑: 好吧,tasomaniac对现有的当前活动提出了很好的观点,OP也希望这样做。
所以基本上我想要的是拨打电话而不退出活动。
但是在android中的电话接口的通话状态期间不可能做任何事情。一个可能的好的解决方案是
PhoneStateListener
查看通话何时结束,然后恢复当前的活动。描述了一些非常好的解决方案..
您需要在清单中添加此权限:
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
并且在您的活动之后,用户必须明确授予权限:
if (Build.VERSION.SDK_INT >= 23) {
if (!Settings.canDrawOverlays(this)) {
Intent i = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
startActivity(i);
}
}