<uses-permission android:name="android.permission.READ_PHONE_STATE" />
The special class PhoneStateListener
The solution is related to a class named PhoneStateListener. I put it in the main activity class. This is the class to handle the Phone-State change. If there’s incoming / outcoming call, this class will be invoked.
This is the code part of the PhoneStateListener, for the complete source follow the link at the bottom of article.
//this is ONLY part of the code, refer bpottom of article //to download complete code ... ... ... public class BacaFatihahActivity extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); private MediaPlayer mp; ... ... ... //this is a code segmentation //THis two lines of codes need to be inserted to the onCreate method //This following codes dealing with the phone-state //detect voice incoming call //onCallStateChanged method will be executed if there's incoming //or outcoming call PhoneStateListener phoneStateListener = new PhoneStateListener() { @Override public void onCallStateChanged(int state, String incomingNumber) { if (state == TelephonyManager.CALL_STATE_RINGING) { //INCOMING call //do all necessary action to pause the audio if(mp!=null){//check mp setPlayerButton(true, false, true); if(mp.isPlaying()){ mp.pause(); } } } else if(state == TelephonyManager.CALL_STATE_IDLE) { //Not IN CALL //do anything if the phone-state is idle } else if(state == TelephonyManager.CALL_STATE_OFFHOOK) { //A call is dialing, active or on hold //do all necessary action to pause the audio //do something here if(mp!=null){//check mp setPlayerButton(true, false, true); if(mp.isPlaying()){ mp.pause(); } } } super.onCallStateChanged(state, incomingNumber); } };//end PhoneStateListener TelephonyManager mgr = (TelephonyManager) getSystemService(TELEPHONY_SERVICE); if(mgr != null) { mgr.listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_STATE); } ... ... ... }//end onCreate }//end class
There are a few things you can do:
First of all, you can listen for changes in the call state using a
PhoneStateListener. You can register the listener in the TelephonyManager:
Remember to unregister the listener when it's no longer needed using the
PhoneStateListener.LISTEN_NONE:
Another thing you can do is listening for the broadcast
android.intent.action.PHONE_STATE. It will contain the extra TelephonyManager.EXTRA_STATE which will give you information about the call.Take a look at the documentation here.
Please note that you'll need the
android.permission.READ_PHONE_STATE-permission in both cases. | |||||||||||||||||||||
|