English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
This article shares the method of Android incoming call blocking for everyone's reference, the specific content is as follows
Permissions
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.CALL_PHONE" /> <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" /> <!-- Register broadcast to listen for outgoing calls --> <receiver android:name="com.example.administrator.endcall.PhoneStateReceiver"> <intent-filter> <action android:name="android.intent.action.PHONE_STATE" /> /> <action android:name="android.intent.action.NEW_OUTGOING_CALL" /> /> </intent-filter> </receiver>
Dialing broadcast—PhoneStateReceiver
package com.example.administrator.endcall; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.telephony.PhoneStateListener; import android.telephony.TelephonyManager; import android.util.Log; public class PhoneStateReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)) {}} String phoneNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER); Log.i("BlockCallHelper", "BlockCallHelper------->>>" + phoneNumber); } } }
Block incoming call
BlockCallHelper
package com.example.administrator.endcall; import android.content.Context; import android.content.SharedPreferences; import android.database.Cursor; import android.net.Uri; import android.os.RemoteException; import android.telephony.PhoneStateListener; import android.telephony.TelephonyManager; import android.util.Log; import com.android.internal.telephony.ITelephony; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; public final class BlockCallHelper { private static final String TAG = "BlockCallHelper"; private Context mContext; private TelephonyManager tManger; private List<String> phones; private BlockCallBack bcb; ////////////////////////////////////////// private static final class Factory { private static final BlockCallHelper instance = new BlockCallHelper(); } public static BlockCallHelper getInstance() { return Factory.instance; } /** * Initialize context and data * @param context */ public BlockCallHelper init(Context context) { if (context == null) { throw new NullPointerException("context == null!"); } this.mContext = context; this.tManger = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE); tManger.listen(new PhoneCallListener(), PhoneCallListener.LISTEN_CALL_STATE); return this; } /** * Inject phone numbers to be intercepted * @param phoneL */ public BlockCallHelper injectBlockPhoneNum(ArrayList<String> blockCalls) { this.phones = blockCalls; return this; } /** * Terminate call */ private void endCall() { Class<TelephonyManager> tmc = TelephonyManager.class; Method getITelephonyMethod; try { getITelephonyMethod = tmc.getDeclaredMethod("getITelephony", (Class[]) null); getITelephonyMethod.setAccessible(true); ITelephony iTelephony = (ITelephony) getITelephonyMethod.invoke(tManger, (Object[]) null); iTelephony.endCall(); catch (NoSuchMethodException e)1) { e1.printStackTrace(); } catch (InvocationTargetException e2) { e2.printStackTrace(); } catch (IllegalAccessException e3) { e3.printStackTrace(); } catch (RemoteException e4) { e4.printStackTrace(); } } private final class PhoneCallListener extends PhoneStateListener { @Override public void onCallStateChanged(int state, String incomingNumber) { if (state == TelephonyManager.CALL_STATE_RINGING) { if (phones.contains(incomingNumber)) { Log.i("BlockCallHelper", "contains contains contains"); endCall(); if (bcb != null) { bcb.callBack(incomingNumber); } } else { Log.i("BlockCallHelper", "contains not-------"); } } } } public BlockCallHelper setBlockCallBack(BlockCallBack back) { this.bcb = back; return this; } public interface BlockCallBack { void callBack(String incomingNum); } }
View the main interface MainActivity
package com.example.administrator.endcall; import android.app.Activity; import android.app.NotificationManager; import android.os.Bundle; import android.util.Log; import android.widget.Toast; import java.util.ArrayList; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ArrayList<String> blockCalls = new ArrayList(); blockCalls.add("13581922339"); blockCalls.add("+8613581922339"); blockCalls.add("18500813370"); blockCalls.add("13717717622"); blockCalls.add("+8613717717622"); BlockCallHelper.getInstance().init(this).injectBlockPhoneNum(blockCalls).setBlockCallBack(new BlockCallHelper.BlockCallBack() { @Override public void callBack(String incomingNum) { Log.i("BlockCallHelper", "incomingNum"-----------" + incomingNum); } }); } }
View AIdl level
ITelephony.aidl
package com.android.internal.telephony; interface ITelephony { void dial(String number); void call(String number); boolean showCallScreen(); boolean showCallScreenWithDialpad(boolean showDialpad); boolean endCall(); void answerRingingCall(); void silenceRinger(); boolean isOffhook(); boolean isRinging(); boolean isIdle(); boolean isRadioOn(); boolean isSimPinEnabled(); void cancelMissedCallsNotification(); boolean supplyPin(String pin); boolean handlePinMmi(String dialString); void toggleRadioOnOff(); boolean setRadio(boolean turnOn); void updateServiceLocation(); void enableLocationUpdates(); void disableLocationUpdates(); int enableApnType(String type); int disableApnType(String type); boolean enableDataConnectivity(); boolean disableDataConnectivity(); boolean isDataConnectivityPossible(); Bundle getCellLocation(); List<NeighboringCellInfo> getNeighboringCellInfo(); int getCallState(); int getDataActivity(); int getDataState(); }
NeighboringCellInfo.aidl
// NeighboringCellInfo.aidl package android.telephony; parcelable NeighboringCellInfo;
That's all for this article. I hope it will be helpful to everyone's learning and also hope everyone will support the Yelling Tutorial more.
Statement: The content of this article is from the Internet, and the copyright belongs to the original author. The content is contributed and uploaded by Internet users spontaneously. This website does not own the copyright, has not been manually edited, and does not assume any relevant legal liability. If you find any content suspected of copyright infringement, please send an email to: notice#oldtoolbag.com (Please replace # with @ when sending an email to report violations, and provide relevant evidence. Once verified, this site will immediately delete the infringing content.)