#android
#Android
Вопрос:
Я добавил, что это мой файл манифеста —
<receiver android:name=".ServiceReceiver">
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
</receiver>
</application>
<uses-permission android:name="android.permission.READ_PHONE_STATE">
</uses-permission>
Тогда мой класс обслуживания выглядит следующим образом —
public class ServiceReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
MyPhoneStateListener phoneListener = new MyPhoneStateListener();
TelephonyManager telephony = (TelephonyManager) context
.getSystemService(Context.TELEPHONY_SERVICE);
telephony.listen(phoneListener, PhoneStateListener.LISTEN_CALL_STATE);
}
}
и мой PhoneStateListener —
public class MyPhoneStateListener extends PhoneStateListener {
public void onCallStateChanged(int state, String incomingNumber) {
Log.i("telephony-example", "State changed: " stateName(state));
}
String stateName(int state) {
switch (state) {
case TelephonyManager.CALL_STATE_IDLE:
Log.d("DEBUG", "***********IDLE********");
return "Idle";
case TelephonyManager.CALL_STATE_OFFHOOK:
Log.d("DEBUG", "***********OFFHOOK********");
return "Off hook";
case TelephonyManager.CALL_STATE_RINGING:
Log.d("DEBUG", "***********RINGING********");
return "Ringing";
}
return Integer.toString(state);
}
}
Я могу видеть состояние ожидания.
Но когда я звоню, я не получаю состояние вызова. Почему?
Ответ №1:
Я думаю, вы смешиваете два подхода для получения состояния телефона. Если вы используете фильтр намерений и широковещательный приемник, то в приемнике нет необходимости вызывать функцию прослушивания TelephonyManager(). Просто проверьте полученное намерение следующим образом :
public void onReceive(Context context, Intent intent) {
String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
String number = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);
if (TelephonyManager.EXTRA_STATE_RINGING.equals(state))
{
Log.d("MPR", "Its Ringing [" number "]");
}
if (TelephonyManager.EXTRA_STATE_IDLE.equals(state))
{
Log.d("MPR", "Its Idle");
}
if (TelephonyManager.EXTRA_STATE_OFFHOOK.equals(state))
{
Log.d("MPR", "Its OffHook");
}
}
Комментарии:
1. Спасибо … получил звонок 🙂 Кстати, вы знаете, как заставить его приостанавливать мое приложение, когда звонит телефон, а затем вернуться к приложению, когда телефонный звонок завершен?
2. AFAIK, если ваше приложение выполняет какое-либо действие, будут вызваны его onPause и onStop, чтобы получить информацию об активности телефона. Если вы запускаете службу, я не вижу причины, по которой вы хотите приостановить выполняемую вами работу. Тем не менее, если вы хотите использовать вышеуказанный метод, чтобы узнать, когда звонит телефон, а затем, в зависимости от логики вашего приложения, прекратить выполнение работы и возобновить позже, но я не понимаю, зачем вам делать это из службы!
3. ну, проблема в том, что у меня играет песня, но она не останавливается, когда звонит телефон, поэтому я спросил.
4. о .. хорошо. Тогда просто используйте этот механизм и остановите песню!
5. @nasaa вы также можете запросить AudioFocus и остановить воспроизведение песни таким образом (при потере фокусировки звука).