我的应用程序将维护一个联系人列表。
来自列表中联系人的任何电话都将被拒接。它们将出现在未接来电列表中,但手机不会响铃。
我的应用程序将维护一个联系人列表。
来自列表中联系人的任何电话都将被拒接。它们将出现在未接来电列表中,但手机不会响铃。
首先创建这个接口:
public interface ITelephony {
boolean endCall();
void answerRingingCall();
void silenceRinger();
}
然后创建一个扩展BroadcastReceiver的类。
public class IncomingCallReceiver extends BroadcastReceiver {
private ITelephony telephonyService;
private String blacklistednumber = "+458664455";
@Override
public void onReceive(Context context, Intent intent) {
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
try {
Class c = Class.forName(tm.getClass().getName());
Method m = c.getDeclaredMethod("getITelephony");
m.setAccessible(true);
ITelephony telephonyService = (ITelephony) m.invoke(tm);
Bundle bundle = intent.getExtras();
String phoneNumber = bundle.getString("incoming_number");
Log.e("INCOMING", phoneNumber);
if ((phoneNumber != null) && phoneNumber.equals(blacklistednumber)) {
telephonyService.silenceRinger();
telephonyService.endCall();
Log.e("HANG UP", phoneNumber);
}
} catch (Exception e) {
e.printStackTrace();
}
}
这将只阻止那个单独的电话号码,但你明白了重点。
在你的清单文件中添加这个:<receiver android:name=".IncomingCallReceiver">
<intent-filter android:priority="999">
<action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
</receiver>
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.PROCESS_INCOMING_CALLS" />
从这里下载ITelephony类。
然后将其放入com.android.internal.telephony.
包中(创建一个新的包)。
接着将该包导入到适当的类中,并使用endCall()
方法拒绝来电。
MODIFY_PHONE_STATE
权限仅适用于系统应用程序(Android 2.3及以上版本)。如果您只想将应用程序用于您可以访问的电话,则可以将其制作为系统应用程序。 - tchelidze