Mam aplikację z usługą. Usługa jest uruchamiana przez aplikację w głównym działaniu w metodzie tworzenia. Mój problem występuje, gdy wychodzę z aplikacji: usługa zatrzymuje się, a czasami restartuje natychmiast, czasami restartuje się ostatnio. Testowałem w wersji 4.1.2 i wersji 2.3.6. usługa nie działa ponownie w wersji 2.3.6. Czy moje podejście jest złe? Pomiędzy czasem zatrzymania i restartu, połączenie, które musi zostać zablokowane, może nadejść. Czy istnieje sposób, aby nie zatrzymać usługi po wyjściu z aplikacji? Uwaga: Nie mogę korzystać z usługi zdalnej.Usługa Androida zatrzymuje się po wyjściu z aplikacji
Dodałem startForeground do serwisu, ale ten sam problem. kiedy zamknąć aplikację usługa zatrzymana, a nie ponowne uruchomienie wersji 2.3.3 nawet widzę notification.But phoneStateListener przyjmuje wartość zerową Skąd mogę mieć pewność, kiedy zamknąć aplikację, usługa nie zatrzymuje
//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)
{
}
}
private void 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);
}
zmienić ustawienie callstatelistener gdzie ze służby nadawać jako Dhawal Sodha poradził, ale w tym blokowanie niechcianych połączeń dostać powolne sprawy. Myślę, że w trakcie transmisji TelephonyManager inicjuje każde połączenie. Kod transmisji poniżej. Kiedy korzystam z usługi, po wyjściu z głównego działania usługa została zatrzymana w wersji 2.3.3. Dowolny pomysł ? Nadawanie lub usługa? Jak przyspieszyć transmisję? wszystkie zmienne wywołujące i obiekt inicjują ponownie w emisji.
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();
}
}
}
Chcesz zablokować numer ??? to po prostu użyj tego kodu w wiadomości Odbieranie .. zamiast usługi startowej. –
Kiedy mówisz "usługi zatrzymuje się", masz na myśli, że jego onDestroy() jest wywoływana po zakończeniu swojej działalności? Ponadto, kiedy mówisz "aplikacja wyjściowa", masz na myśli właśnie ukończenie działalności? – SirKnigget
yes kończenie głównej czynności za pomocą System.exit (0); – user2331641