如何以编程方式终止电话?

时间:2014-08-05 12:21:16

标签: android eclipse telephonymanager

我正在开发一个调用特定联系号码的Android应用程序,但我需要在几秒钟后自动断开呼叫。

即使我需要等到上面的调用在我的应用程序中断开连接。

2 个答案:

答案 0 :(得分:1)

This是我能够找到的最简单的解决方案,以编程方式结束通话并对其进行了很好的解释,以下是x秒后如何结束通话的示例:

这将是您可以调用的方法示例:

public void startDial(int milliseconds, string phoneNumber){

    //performs call
    if (!phoneNumber.equals("")) {

        Intent intent = new Intent(this, MyReceiver.class);
        PendingIntent pi = PendingIntent.getBroadcast(getApplicationContext(), 0, intent, 0);
        AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
        alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + milliseconds, pi);

        Uri number = Uri.parse("tel:" + phoneNumber);
        Intent dial = new Intent(Intent.ACTION_CALL, number);

        startActivity(dial, 0);
    }
}

这将是您可以设置的接收器的示例:

public class MyReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        endCall(context);
    }

    public void endCall(Context context) {
        TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
        try {
            Class c = Class.forName(tm.getClass().getName());
            Method m = c.getDeclaredMethod("getITelephony");
            m.setAccessible(true);
            Object telephonyService = m.invoke(tm);

            c = Class.forName(telephonyService.getClass().getName());
            m = c.getDeclaredMethod("endCall");
            m.setAccessible(true);
            m.invoke(telephonyService);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

答案 1 :(得分:0)

对于 API >= 26 (ANDROID_O)

<uses-permission android:name="android.permission.ANSWER_PHONE_CALLS" />


requestPermissions(new String[] {
   Manifest.permission.ANSWER_PHONE_CALLS
 }, PERMISSION_RQUEST);

TelecomManager mgr = (TelecomManager) getSystemService(TELECOM_SERVICE);
mgr.endCall();