В моем приложении я использую BroadcastReceiver для отслеживания состояния телефона.Android: запустите службу, когда мое приложение не используется
В TelephonyManager имеется 3 состояния.
- EXTRA_STATE_IDLE
- EXTRA_STATE_OFFHOOK
- EXTRA_STATE_RINGING
В моем случае я хочу, чтобы показать простой пользовательский интерфейс, который показывает некоторые подробности о вызывающем, когда телефон звонит, и я хочу, чтобы закрыть, что ui, когда вызов, на который посетил пользователь, или вызов закончился.
Я звоню на службу, когда состояние телефона звонит. Если мое приложение используется, я могу видеть свою часть ui во время звонка телефона. Если мое приложение не используется, я не могу видеть часть ui.
Я проверил в моем фоне. Служба не работает. Я думаю, что моя служба работает только тогда, когда мое приложение используется, и оно не работает, когда мое приложение не используется.
Чтобы преодолеть это, что мне следует делать?
Это мой код.
@Override
public void onReceive(Context context, Intent intent) {
LoginActivity.login.finish();
MainActivity.main.finish();
telephonyRegister(context,intent);
}
public void telephonyRegister(final Context context, Intent intent)
{
TelephonyManager telephony = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
String imeiSIM1= telephony.getDeviceId();
System.out.println("IMEI NUMBER"+imeiSIM1);
ctx=context;
if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(
TelephonyManager.EXTRA_STATE_IDLE)) {
try
{
ProjectDailogActivity.projdialog.finish();
}catch(Exception e)
{
e.printStackTrace();
}
}
else if(intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(
TelephonyManager.EXTRA_STATE_OFFHOOK))
{
try{
ProjectDailogActivity.projdialog.finish();
}catch(Exception e)
{
e.printStackTrace();
}
}
else if(intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(
TelephonyManager.EXTRA_STATE_RINGING)){
phoneNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);
isringing=true;
Intent intent11 = new Intent(ctx,ProjectDailogActivity.class);
intent11.putExtra("incoming_number",phoneNumber);
intent11.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
ctx.startActivity(intent11);
}
}
Manifest.xml
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<receiver android:name="com.domyhome.broadcastreceiver.IncomingCallInterceptor" >
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
</receiver>
я получил окно, как TrueCaller.
Только значения, о которых я упомянул, являются по умолчанию.
Но это же окно не появляется, когда мое приложение не используется.
Пожалуйста, дайте мне представление.
На самом деле это приложение похоже на TrueCaller. Поэтому он всегда должен работать на фоне. Я вижу интерфейс, когда мое приложение не используется. Я также пробовал с сервисом и без обслуживания (просто прямо называемый актив из состояния звонка). Но я хочу показать пользовательский интерфейс, когда мое приложение также не используется? –
Вы можете достичь того, что вы просите по вышеуказанному подходу. Вы можете определить startactivity (намерение (из вашего broadcastreciever – therealprashant
). Пожалуйста, проверьте мой вопрос. Я обновил. –