Android 使用InCallService以静默方式拒绝呼叫
我正在尝试使用InCallService通过使我的应用程序成为默认拨号程序来拒绝来电。拒绝来电很好,但问题是如果手机处于振动模式,它会振动一点。我已经探索了这个类,但我找不到任何方法使振铃器静音。这是我的代码,我是如何实现InCallService服务的Android 使用InCallService以静默方式拒绝呼叫,android,Android,我正在尝试使用InCallService通过使我的应用程序成为默认拨号程序来拒绝来电。拒绝来电很好,但问题是如果手机处于振动模式,它会振动一点。我已经探索了这个类,但我找不到任何方法使振铃器静音。这是我的代码,我是如何实现InCallService服务的 你能告诉我怎样才能无声地拒绝电话吗 我建议您改变方法 步骤1:创建广播接收器 public class CallReceiver extends BroadcastReceiver { private Context context;
你能告诉我怎样才能无声地拒绝电话吗 我建议您改变方法 步骤1:创建广播接收器
public class CallReceiver extends BroadcastReceiver {
private Context context;
@Override
public void onReceive(Context context, Intent intent) {
this.context = context;
rejectCall();
}
public void rejectCall() {
try {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
TelecomManager telecomManager = (TelecomManager) context.getSystemService(Context.TELECOM_SERVICE);
if (telecomManager != null) {
telecomManager.endCall();
}
} else {
rejectCallViaTelephonyManager();
}
Log.d(TAG, "call ended successfully.");
} catch (Exception e) {
e.printStackTrace();
}
}
private void rejectCallViaTelephonyManager() {
ITelephony telephonyService = getTelephonyService(context);
if (telephonyService != null) {
telephonyService.silenceRinger();
telephonyService.endCall();
}
}
private ITelephony getTelephonyService(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);
return (ITelephony) m.invoke(tm);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
步骤2:将此接收者添加到清单文件
<receiver
android:name=".CallReceiver"
android:enabled="true"
android:exported="true">
<intent-filter android:priority="999">
<action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
</receiver>
步骤3:您还需要添加权限
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
如果要使应用程序成为默认拨号程序应用程序,请尝试实现API。该API将允许您在系统开始响铃之前拦截和阻止调用。我们已经这样做了。它在andoid P上不起作用。其次,它也会稍微震动手机。它确实起作用,TelecomManager专门用于设备Build.VERSION.SDK\u INT>=Build.VERSION\u code.O。对于振动问题,您需要查看通知服务。
<uses-permission android:name="android.permission.READ_PHONE_STATE" />