【问题标题】:How to terminate a phone call programmatically?如何以编程方式终止电话?
【发布时间】:2014-08-05 12:21:16
【问题描述】:

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

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

【问题讨论】:

标签: android eclipse telephonymanager


【解决方案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();
        }
    }
}

【讨论】:

    【解决方案2】:

    对于 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();
    

    【讨论】:

      猜你喜欢
      • 2022-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-12
      • 2015-05-31
      • 1970-01-01
      相关资源
      最近更新 更多