#android #broadcastreceiver
#Android #broadcastreceiver
Вопрос:
Я хочу открыть новое activity
, когда пользователь отключает входящий вызов с определенного номера. Я знаю, что мне нужно использовать TelephonyManager
и PhoneStateListener
прослушивать разные состояния вызова. Я также пробовал приведенный ниже пример, но он открывается activity
более одного раза, я хочу открыть только один раз. пожалуйста, помогите мне
public class Demos extends BroadcastReceiver{
public void onReceive(final Context context, Intent intent) {
if (!intent.getAction().equals("android.intent.action.PHONE_STATE"))
return;
else
{
final TelephonyManager telephonyManager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
PhoneStateListener callStateListener = new PhoneStateListener()
{
public void onCallStateChanged(int state, String incomingNumber)
{
if((state == TelephonyManager.CALL_STATE_RINGING))
{ }
if((state==TelephonyManager.CALL_STATE_OFFHOOK))
{ }
if(!(state == TelephonyManager.CALL_STATE_RINGING) amp;amp; (state==TelephonyManager.CALL_STATE_IDLE) )
{
if(incomingNumber.equalsIgnoreCase("XXX-XXX-XXXX"))
{ Intent i=new Intent(context,Activity_two.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
telephonyManager.listen(null, PhoneStateListener.LISTEN_NONE); }
}
}
}; telephonyManager.listen(callStateListener,PhoneStateListener.LISTEN_CALL_STATE)
}
}
Комментарии:
1. пожалуйста, не уменьшайте масштаб, если вы не знаете правильного ответа.
Ответ №1:
Можете ли вы попробовать приведенный ниже код вместе с проверкой номера вашего телефона
final TelephonyManager telephony = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
telephony.listen(new PhoneStateListener(){
@Override
public void onCallStateChanged(int state, String incomingNumber) {
super.onCallStateChanged(state, incomingNumber);
Log.e("CALL STATE", state "");
if(!(state == TelephonyManager.CALL_STATE_RINGING) amp;amp; (state==TelephonyManager.CALL_STATE_IDLE) )
{
Intent i=new Intent(context, yourActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
}
},PhoneStateListener.LISTEN_CALL_STATE);
Комментарии:
1. Действие открывается более одного раза, когда ваше приложение находится на переднем плане. Правильно? Если это так, попробуйте проверить, добавив атрибут android:launchMode=»singleTask» к действию.
2. я думаю, что мой код уже работает, но мне нужно добавить android: launchMode =»singleTask» кстати, спасибо за поддержку