Intereting Posts
Android: простой способ изменить цвет png-файла Как запустить контекстную панель действий для текстового просмотра программно с копиями опций по умолчанию и выбрать все? Android AdRequest возвращает только onAdFailedToLoad AdRequest.ERROR_CODE_NO_FILL Как получить сертификат отпечатка SHA-1 в Android Studio для режима отладки? Несколько камер в libgdx (возможно, аналогичные в других средах) Изменение значка навигационного ящика на панели действий android Android Froyo настройка мелодии звонка Как определить местоположение хранилища отладки для отладочной сборки Android ant? Вход в систему дважды при использовании SyncAdapters StartVoiceRecognition с Bluetooth-гарнитурой не работает Кнопка Android TimePicker AM / PM не вызывает onTimeChanged Android getResource () неопределенная ошибка Легенда и набор полей в android Как сделать его единственным пейзажем для планшетов и только портрет для телефонов? Android AudioRecord, какие настройки для записи вызова

Как включить динамик для входящего вызова программно в Android L?

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

audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); audioManager.setMode(AudioManager.MODE_IN_CALL); if (!audioManager.isSpeakerphoneOn()) audioManager.setSpeakerphoneOn(true); audioManager.setMode(AudioManager.MODE_NORMAL); 

манифест

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

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

Это мой полный код класса

 public class AcceptCallActivity extends Activity { private static final String MANUFACTURER_HTC = "HTC"; private KeyguardManager keyguardManager; private AudioManager audioManager; private CallStateReceiver callStateReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); keyguardManager = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE); audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); } @Override protected void onResume() { super.onResume(); registerCallStateReceiver(); updateWindowFlags(); acceptCall(); } @Override protected void onPause() { super.onPause(); if (callStateReceiver != null) { unregisterReceiver(callStateReceiver); callStateReceiver = null; } } private void registerCallStateReceiver() { callStateReceiver = new CallStateReceiver(); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(TelephonyManager.ACTION_PHONE_STATE_CHANGED); registerReceiver(callStateReceiver, intentFilter); } private void updateWindowFlags() { if (keyguardManager.inKeyguardRestrictedInputMode()) { getWindow().addFlags( WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); } else { getWindow().clearFlags( WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); } } private void acceptCall() { // for HTC devices we need to broadcast a connected headset boolean broadcastConnected = MANUFACTURER_HTC.equalsIgnoreCase(Build.MANUFACTURER) && !audioManager.isWiredHeadsetOn(); if (broadcastConnected) { broadcastHeadsetConnected(false); } try { try { Log.d("AnswerCall","execute input keycode headset hook"); //Turn on speaker audioManager.setMode(AudioManager.MODE_IN_CALL); if (!audioManager.isSpeakerphoneOn()) audioManager.setSpeakerphoneOn(true); audioManager.setMode(AudioManager.MODE_NORMAL); Runtime.getRuntime().exec("input keyevent " + Integer.toString(KeyEvent.KEYCODE_HEADSETHOOK)); } catch (IOException e) { // Runtime.exec(String) had an I/O problem, try to fall back Log.d("AnswerCall","send keycode headset hook intents"); String enforcedPerm = "android.permission.CALL_PRIVILEGED"; Intent btnDown = new Intent(Intent.ACTION_MEDIA_BUTTON).putExtra( Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_HEADSETHOOK)); Intent btnUp = new Intent(Intent.ACTION_MEDIA_BUTTON).putExtra( Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_HEADSETHOOK)); sendOrderedBroadcast(btnDown, enforcedPerm); sendOrderedBroadcast(btnUp, enforcedPerm); } } finally { if (broadcastConnected) { broadcastHeadsetConnected(false); } } } private void broadcastHeadsetConnected(boolean connected) { Intent i = new Intent(Intent.ACTION_HEADSET_PLUG); i.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY); i.putExtra("state", connected ? 1 : 0); i.putExtra("name", "mysms"); try { sendOrderedBroadcast(i, null); } catch (Exception e) { } } private class CallStateReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { finish(); } } } 

Solutions Collecting From Web of "Как включить динамик для входящего вызова программно в Android L?"

Наконец, я получил решение. Я поставил над кодом пробег внутри потока. Он работал хорошо. Это мой код. Надеюсь, это может помочь кому-то

  Thread thread = new Thread() { @Override public void run() { try { while(true) { sleep(1000); audioManager.setMode(AudioManager.MODE_IN_CALL); if (!audioManager.isSpeakerphoneOn()) audioManager.setSpeakerphoneOn(true); } } catch (InterruptedException e) { e.printStackTrace(); } } }; thread.start(); 

Я наткнулся на это решение. Надеюсь, что это поможет вам.

Final static int FOR_MEDIA = 1;

Final static int FORCE_NONE = 0;

Final static int FORCE_SPEAKER = 1;

Класс audioSystemClass = Class.forName ("android.media.AudioSystem");

Метод setForceUse = audioSystemClass.getMethod ("setForceUse", int.class, int.class);

SetForceUse.invoke (null, FOR_MEDIA, FORCE_SPEAKER);