Intereting Posts
Android: создание родительского макета и расширение его, чтобы поддерживать одинаковый внешний вид во всех действиях приложения Как я могу использовать несколько значений -S с помощью aapt без использования <add-resource>? Как установить изображение в imageView, используя путь к файлу в android Какие версии Android поддерживают алгоритмы подписи пакетов? Как сделать окно активности всегда на высоте Android Collapsing Toolbar не использует инерцию, например приложение Google Play. Концепция внутреннего класса Android и Java Мигающий экран перехода изображения между действиями Ошибка Gradle в Android Studio: плагин с идентификатором «com.android.library» не найден Перенос всех пользователей моего платного приложения на покупку в приложении Как объявить обертку содержимого динамической кнопке в коде Как установить файл .apk на устройство Android Android – MediaPlayer на Prepare Called еще до того, как поток подготовлен на Android 4.0+ Runtime Exception при использовании настроек в Android (я следую за курсом разработчика Android udacity) Recyclerview не вызывает никакого адаптера: onCreateViewHolder, onBindViewHolder,

Отклонение входящего вызова в android

Я хочу отклонить входящие в android, я видел так много кода из этих ссылок.

  1. Android: Полный контроль над телефоном (режим киоска), возможно ли это? Как?

  2. Как отклонять вызов программно в android

  3. http://androidsourcecode.blogspot.in/2010/10/blocking-incoming-call-android.html

  4. http://androidbridge.blogspot.com/2011/05/how-to-answer-incoming-call-in-android.html?showComment=1361478035090#c5468022990217431781

Но я все еще не могу этого сделать, может ли кто-нибудь сказать мне простым и легким шагам, как это сделать?

Solutions Collecting From Web of "Отклонение входящего вызова в android"

Чтобы перехватить ваш звонок, вам просто нужно:
1. Сделайте пакет с именем. com.android.internal.telephony;
2. В этом пакете создайте файл интерфейса с именем ITelephony.
И напишите этот код в этом файле интерфейса.

boolean endCall(); void answerRingingCall(); void silenceRinger(); 

Теперь в вашем классе, где вы хотите перехватить вызов, расширьте этот класс до BroadcastReceiver и в функции onReceive() напишите следующий код.

 TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); try { Class c = Class.forName(tm.getClass().getName()); Method m = c.getDeclaredMethod("getITelephony"); m.setAccessible(true); telephonyService = (ITelephony) m.invoke(tm); Bundle bundle = intent.getExtras(); String phoneNumber = bundle.getString("incoming_number"); Log.d("INCOMING", phoneNumber); if ((phoneNumber != null)) { telephonyService.endCall(); Log.d("HANG UP", phoneNumber); } } catch (Exception e) { e.printStackTrace(); } 

Это оно.

Предоставьте соответствующее разрешение и добавьте файл ITelephony.java

 private void declinePhone(Context context) throws Exception { try { String serviceManagerName = "android.os.ServiceManager"; String serviceManagerNativeName = "android.os.ServiceManagerNative"; String telephonyName = "com.android.internal.telephony.ITelephony"; Class<?> telephonyClass; Class<?> telephonyStubClass; Class<?> serviceManagerClass; Class<?> serviceManagerNativeClass; Method telephonyEndCall; Object telephonyObject; Object serviceManagerObject; telephonyClass = Class.forName(telephonyName); telephonyStubClass = telephonyClass.getClasses()[0]; serviceManagerClass = Class.forName(serviceManagerName); serviceManagerNativeClass = Class.forName(serviceManagerNativeName); Method getService = // getDefaults[29]; serviceManagerClass.getMethod("getService", String.class); Method tempInterfaceMethod = serviceManagerNativeClass.getMethod("asInterface", IBinder.class); Binder tmpBinder = new Binder(); tmpBinder.attachInterface(null, "fake"); serviceManagerObject = tempInterfaceMethod.invoke(null, tmpBinder); IBinder retbinder = (IBinder) getService.invoke(serviceManagerObject, "phone"); Method serviceMethod = telephonyStubClass.getMethod("asInterface", IBinder.class); telephonyObject = serviceMethod.invoke(null, retbinder); telephonyEndCall = telephonyClass.getMethod("endCall"); telephonyEndCall.invoke(telephonyObject); } catch (Exception e) { e.printStackTrace(); Log.d("unable", "msg cant dissconect call...."); } 

Вам понадобится широковещательный приемник для этого с фильтром намерения, я думаю ACTION_ANSWER

Подробнее об этом здесь: http://developer.android.com/reference/android/content/Intent.html#ACTION_ANSWER

Вы можете зарегистрировать его с помощью файла манифеста или метода registerReceiver

Подробнее здесь: http://developer.android.com/reference/android/content/Context.html#registerReceiver(android.content.BroadcastReceiver , android.content.IntentFilter)

Также вам нужно указать соответствующие разрешения в файле манифеста.

 <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" /> 

Ссылки, которые вы предоставили, достаточно хороши. Вам просто нужно больше терпения 🙂

Счастливое кодирование.

Создайте интерфейс в com.android.internal.telephony и com.android.internal.telephony имя

 interface ITelephony { /** * Demonstrates some basic types that you can use as parameters * and return values in AIDL. */ void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat, double aDouble, String aString); boolean endCall(); void silenceRinger();strong text void answerRingingCall(); } // then catch the incoming call intent and call below method if (intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER) != null) { number = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER); Toast.makeText(context, "INCOMING call catched: ", Toast.LENGTH_SHORT).show(); disconnectPhoneItelephony(mContext) } private void disconnectPhoneItelephony(Context context) { ITelephony telephonyService; TelephonyManager telephony = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); try { Class c = Class.forName(telephony.getClass().getName()); Method m = c.getDeclaredMethod("getITelephony"); m.setAccessible(true); SessionManager.getInstance(context).setBlockStatusAllow("BLOCKED"); telephonyService = (ITelephony) m.invoke(telephony); telephonyService.silenceRinger(); telephonyService.endCall(); } catch (Exception e) { e.printStackTrace(); } } 

Добавить необходимое разрешение в манифест

Это лучшее руководство для блокировки всех входящих вызовов, которые вы можете настроить, чтобы блокировать входящий вызов только выбранных номеров.

Блок входящих вызовов Android