The idea behind is to place a call and to listen to the phone state change to switch on the speaker when the call is established.
package com.danielthat.loudspeaker; import android.media.AudioManager; import android.net.Uri; import android.os.Bundle; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.telephony.PhoneStateListener; import android.telephony.TelephonyManager; import android.view.View; import android.widget.Button; import android.widget.EditText; public class Loudspeaker extends Activity { Button mButton; EditText mEdit; TelephonyManager manager; StatePhoneReceiver myPhoneStateListener; boolean callFromApp=false; // To control the call has been made from the application boolean callFromOffHook=false; // To control the change to idle state is from the app call @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.layout_loudspeaker); //To be notified of changes of the phone state create an instance //of the TelephonyManager class and the StatePhoneReceiver class myPhoneStateListener = new StatePhoneReceiver(this); manager = ((TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE)); mEdit = (EditText)findViewById(R.id.editText1); mButton = (Button) findViewById(R.id.button1); mButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { String phoneNumber = mEdit.getText().toString(); manager.listen(myPhoneStateListener, PhoneStateListener.LISTEN_CALL_STATE); // start listening to the phone changes callFromApp=true; Intent i = new Intent(android.content.Intent.ACTION_CALL, Uri.parse("tel:+" + phoneNumber)); // Make the call startActivity(i); } }); } // Monitor for changes to the state of the phone public class StatePhoneReceiver extends PhoneStateListener { Context context; public StatePhoneReceiver(Context context) { this.context = context; } @Override public void onCallStateChanged(int state, String incomingNumber) { super.onCallStateChanged(state, incomingNumber); switch (state) { case TelephonyManager.CALL_STATE_OFFHOOK: //Call is established if (callFromApp) { callFromApp=false; callFromOffHook=true; try { Thread.sleep(500); // Delay 0,5 seconds to handle better turning on loudspeaker } catch (InterruptedException e) { } //Activate loudspeaker AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); audioManager.setMode(AudioManager.MODE_IN_CALL); audioManager.setSpeakerphoneOn(true); } break; case TelephonyManager.CALL_STATE_IDLE: //Call is finished if (callFromOffHook) { callFromOffHook=false; AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); audioManager.setMode(AudioManager.MODE_NORMAL); //Deactivate loudspeaker manager.listen(myPhoneStateListener, // Remove listener PhoneStateListener.LISTEN_NONE); } break; } } } }
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.danielthat.loudspeaker" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> <uses-permission android:name="android.permission.CALL_PHONE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.danielthat.loudspeaker.Loudspeaker" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".Loudspeaker" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Number to call with loudspeaker on:" /> <EditText android:id="@+id/editText1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/textView1" android:layout_below="@+id/textView1" android:ems="10" android:inputType="phone" /> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/editText1" android:layout_below="@+id/editText1" android:text="Call" /> </RelativeLayout>
Erzurum
ReplyDeleteistanbul
Ağrı
Malatya
Trabzon
08İ1V
Denizli
ReplyDeleteAnkara
Antep
Bursa
Eskişehir
4MZ
ankara parça eşya taşıma
ReplyDeletetakipçi satın al
antalya rent a car
antalya rent a car
ankara parça eşya taşıma
FLZ
FCAD9
ReplyDeleteŞırnak Lojistik
Tunceli Parça Eşya Taşıma
Edirne Parça Eşya Taşıma
Bayburt Lojistik
Düzce Parça Eşya Taşıma
C5EB4
ReplyDeleteHakkari Parça Eşya Taşıma
İstanbul Şehirler Arası Nakliyat
Kars Parça Eşya Taşıma
Tekirdağ Boya Ustası
Bartın Parça Eşya Taşıma
Kütahya Şehirler Arası Nakliyat
Çerkezköy Sineklik
Bayburt Evden Eve Nakliyat
Van Evden Eve Nakliyat
F1C5A
ReplyDeletehttps://referanskodunedir.com.tr/
C39DB
ReplyDeleteCoin Üretme
Mexc Borsası Kimin
Mexc Borsası Güvenilir mi
Kripto Para Nedir
Kripto Para Kazma Siteleri
Binance Madenciliği Nedir
Bitcoin Nasıl Üretilir
Mexc Borsası Güvenilir mi
Coin Çıkarma Siteleri
6AF2E
ReplyDeleteCoin Çıkarma
Coin Oynama
Bitcoin Kazma
Bitcoin Üretme Siteleri
Binance Madenciliği Nedir
Coin Nasıl Kazılır
Bitcoin Nedir
Bitcoin Nasıl Kazanılır
Bitcoin Kazanma
2C7CF
ReplyDeleteledger live desktop
ledger
wallet arculus
wallet ledger
onekey wallet
trezor web
wallet ledger live
wallet avax
trezor suite web