Как принять входящий вызов, нажав кнопку?

Я пытаюсь реализовать свой собственный интерфейс обработки телефонных вызовов.

То, что я хочу сделать, – это при поступлении входящего телефонного номера и изображения, и, если я нажму кнопку, входящий вызов будет принят / принят.

Связанный код:

@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); answerButton = (Button) findViewById(R.id.pickup); answerButton.setOnClickListener(new OnClickListener() { public void onClick(final View v) { Intent intent = new Intent("android.intent.action.ANSWER"); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); } }); 

К сожалению, код не работает. Во-первых, если я нажимаю кнопку ответа, выдается исключение:

ActivityNotFoundException: Активность не обнаружена для обработки Intent {
действовать = android.intent.action.ANSWER

Затем я добавил запись в AndroidManifest.xml:

 <uses-permission android:name="android.permission.CALL_PHONE" /> 

Я снова запускаю приложение, больше нет исключения. Однако я сомневаюсь, что входящий звонок не принят. Потому что, если нажать кнопку ответа на экран Android (зеленая кнопка), принимается входящий звонок, а зеленый значок вызова также отображается в верхнем левом углу экрана эмулятора, в то время как у моего приложения нет.

Я также прочитал исходный код приложения Phone в источнике android. В классе Phone есть метод, например acceptCall (). Но эти коды кажутся мне трудными, потому что в коде есть много деклараций импорта, таких как:

 import com.android.internal.telephony.Call; import com.android.internal.telephony.CallStateException; import com.android.internal.telephony.CallerInfo; import com.android.internal.telephony.CallerInfoAsyncQuery; import com.android.internal.telephony.Connection; import com.android.internal.telephony.MmiCode; import com.android.internal.telephony.Phone; 

И, если я добавлю этот импорт в свой код, будет слишком много ошибок, таких как:
The import com.android.internal.telephony cannot be resolved .

Каков правильный и простой способ для моей проблемы?

Добавьте категорию " android.intent.category.DEFAULT " ( Intent.CATEGORY_DEFAULT )

Цель android.intent.action.ANSWER как-то не работает android.intent.action.ANSWER образом. Существует способ обхода путем эмуляции кнопки Bluetooth для ответа на входящий вызов. Вы можете увидеть пример из проекта автоответчика .

Вам необходимо создать широковещательный приемник, в котором вы получите событие, когда звонит ваш телефон, и после этого вы можете запустить требуемую активность. Вы не можете заменить экран входящих вызовов по умолчанию, пока не будете использовать CUSTOM ROM. И не забудьте установить приоритет в широковещательном приемнике в файле манифеста. Как только вы получите событие, вы можете использовать объект ITelephony с помощью reflection.And, который может предоставить вам методы для ответа или отклонения вызова.

Это возможно с помощью пакета com.android.internal.telephony , но вам нужно найти способ использования этих методов в eclipse, и ваше приложение должно быть скомпилировано как системное приложение, использующее исходный код Android.

Измените способ приема вызова следующим образом:

 public static void acceptCall(Context context) { Intent buttonUp = new Intent(Intent.ACTION_MEDIA_BUTTON); buttonUp.putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_HEADSETHOOK)); context.sendOrderedBroadcast(buttonUp, "android.permission.CALL_PRIVILEGED"); } 
Intereting Posts
Могу ли я узнать парный номер модели устройства Bluetooth производителя? Как программно изменить высоту элемента списка после заполнения списка Как остановить заголовки на вкладках Android от обертывания в середине слова? Ошибка в веб-сервисе Callin Java от Android с помощью k-Soap Попытка вызвать метод интерфейса 'void android.support.v7.widget.DecorContentParent.setWindowCallback (android.view.Window $ Callback)' События Android MediaRouter Volume Использование Youtube Intent для запуска видео с определенной начальной точки Android: Навигация Ящик вертикальная тень Как программно перевести Android в режим ожидания? Обновление пользовательского интерфейса из службы (с помощью обработчика?) Преобразовать строку Date в timestamp в Android? Есть ли способ получить исходный код из файла APK? Android: Когда разрушен контекст OpenGL? Автоматическое зеркалирование для макета RTL не работает в версиях Android ниже 6.0 Как анализировать значение в атрибуте в разборе xml