后台的INTENT.ACTION_CALL

问题描述 投票:0回答:3

我需要在我的应用程序中在后台调用,因此当用户单击按钮时,它应该开始在后台调用,用户会知道他正在调用,但他不会看到拨号器,他会看到应用程序,以通话时再现声音。

所以基本上我想要的是在不退出活动的情况下拨打电话

我尝试了一项服务,但不起作用

 Intent callIntent = new Intent(Intent.ACTION_CALL);
 callIntent.setData(Uri.parse("tel:123456789"));
 startService (callIntent);

对不起我的英语

android android-intent android-service
3个回答
1
投票

试试这个:

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" />

1
投票

背后代码:

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
查看通话何时结束,然后恢复当前的活动。描述了一些非常好的解决方案..


0
投票

您需要在清单中添加此权限:

<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);
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.