当任何来电发生时,我想停止启动呼叫接收屏幕(默认,像往常一样来电时)。而不是我想启动我自己的活动来响应。
谁能帮帮我。谢谢
首先制作一个 BroadcastReceiver 的子类
public class CallReceiver extends BroadcastReceiver {
将其添加到 manifest.xml 文件中
<receiver android:name="com.myapp.calldropper.CallReceiver" >
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
</receiver>
在 onReceive 中默认启动另一个 Activity Screen
Intent callRejectIntent = new Intent(context, MainActivity.class);
callRejectIntent.putExtra("MOBILE_NUMBER", mobNum);
callRejectIntent.putExtra("REJECT_COUNT", rejectCount);
callRejectIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(callRejectIntent);
您的活动将在默认活动上启动。现在您可以响应来自您的活动的来电,您可以拒绝来电。
为此制作一个名为的单独包com.android.internal.telephony
,并在其中创建一个名为ITelephony.aidl
. 该文件将包含
package com.android.internal.telephony;
import android.os.Bundle;
interface ITelephony {
boolean endCall();
void dial(String number);
void answerRingingCall();
}
在 onCreate 中添加以下代码
TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
try {
// "cheat" with Java reflection to gain access to TelephonyManager's ITelephony getter
Class<?> c = Class.forName(tm.getClass().getName());
Method m = c.getDeclaredMethod("getITelephony");
m.setAccessible(true);
telephonyService = (ITelephony) m.invoke(tm);
} catch (Exception e) {
e.printStackTrace();
}
现在您可以通过调用以下函数来拒绝来电
private void ignoreCall() {
try {
// telephonyService.silenceRinger();
telephonyService.endCall();
} catch (RemoteException e) {
e.printStackTrace();
}
moveTaskToBack(true);
finish();
}