У меня есть приложение с сервисом. Служба запускается приложением в основной деятельности по методу создания. Моя проблема возникает, когда я выхожу из приложения: служба останавливается и иногда перезапускается немедленно, иногда перезапускается в последнее время. Я тестировал версию 4.1.2 и версию 2.3.6. служба не возвращается в версии 2.3.6. Является ли мой подход неправильным? Между временем остановки и перезапуска может наступить вызов, который должен заблокирован. Есть ли способ не остановить службу при выходе из приложения? Примечание: я не могу использовать удаленный сервис.Служба Android останавливается при выходе из приложения
Я добавил startForeground для обслуживания, но та же проблема. когда я выйти из приложения служба остановлена и не перезапускать версии 2.3.3, даже я вижу notification.But phoneStateListener принимает нулевое значение Как я могу гарантировать, когда я выйти из приложения, служба не останавливается
//application main metod
@Override
protected void onCreate(Bundle savedInstanceState) {
//.....
startService(new Intent(getApplicationContext(), MyPhoneStateListener.class));
}
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
setCallListener();
setNoti();
return START_STICKY;
}
private void setCallListener()
{
try
{
if (phoneStateListener==null)
{
phoneStateListener = new StateListener();
telephonymanager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
telephonymanager.listen(phoneStateListener,PhoneStateListener.LISTEN_CALL_STATE);
}
}
catch(Exception ex)
{
}
}
собственной недействительным setNoti () {
Notification notification= new Notification(R.drawable.ic_launcher, getResources().getString(R.string.app_name), System.currentTimeMillis());
Intent main = new Intent(this, MainActivity.class);
main.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, main, PendingIntent.FLAG_UPDATE_CURRENT);
notification.setLatestEventInfo(this, getResources().getString(R.string.app_name), getResources().getStringArray(R.array.blockstate)[Sabitler.ShieldState].toString(), pendingIntent);
notification.flags |= Notification.FLAG_FOREGROUND_SERVICE | Notification.FLAG_NO_CLEAR;
startForeground(123456, notification);
}
я изменить, где установка callstatelistener от службы вещать в Dhawal Sodha рекомендуется, но в этом случае блокировки нежелательных вызовов получить медленно. Я думаю, что на трансляции TelephonyManager инициализирует каждый вызов. Код трансляции ниже. Когда я пользуюсь услугой, , когда основное действие завершено, остановлено в версии 2.3.3. Есть идеи ? Трансляция или услуга? Как сделать трансляцию быстрее? все вызывающие переменные и объект снова инициализируются в трансляции.
public class PhoneStateBroadcastReceiver extends BroadcastReceiver{
MyCustomStateListener myCustomStateListener;
TelephonyManager telephonymanager;
@Override
public void onReceive(Context context, Intent intent)
{
try
{
//Log.e("receiver1",String.valueOf(System.currentTimeMillis()));
telephonymanager = (TelephonyManager) context.getSystemService(context.TELEPHONY_SERVICE);
myCustomStateListener = new MyCustomStateListener(context,telephonymanager);
telephonymanager.listen(myCustomStateListener, PhoneStateListener.LISTEN_CALL_STATE);
//Log.e("receiver2",String.valueOf(System.currentTimeMillis()));
telephonymanager.listen(myCustomStateListener, PhoneStateListener.LISTEN_NONE);
}
catch(Exception ex)
{
Toast.makeText(context,"setCallListener:"+ex.toString(), Toast.LENGTH_SHORT).show();
}
}
}
Вы хотите заблокировать номер ??? то просто используйте этот код в Broadcast receive .. вместо запуска службы. –
Когда вы говорите «остановки обслуживания», вы имеете в виду, что его onDestroy() вызывается после завершения вашей активности? Кроме того, когда вы говорите «выход из приложения», вы имеете в виду только закончить деятельность? – SirKnigget
есть отделка основной деятельности с помощью System.exit (0); – user2331641