2017-06-09 6 views
0

Ich habe eine App, die einen Dienst setzt und einen SettingContentObserver startet, um Änderungen in der Lautstärke, WiFi und GPS zu hören. Sie können wählen, ob Sie den Dienst starten oder stoppen möchten. Der Dienst ist START_STICKY und wird daher nicht beendet, wenn die App geschlossen wird.Kill-Service, wenn App deinstalliert wird

Die Frage ist: wenn ich meine App unlist, ohne den Prozess zu töten, was kann ich tun, um es zu töten? Diese

ist der Service:

public class ListenerService extends Service { 
    SettingsContentObserver mSettingsContentObserver; 
    Context context; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     context = getApplicationContext(); 
     mSettingsContentObserver = new SettingsContentObserver(context, new Handler()); 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     super.onStartCommand(intent, flags, startId); 
     this.getApplicationContext().getContentResolver().registerContentObserver(Settings.System.CONTENT_URI, true, mSettingsContentObserver); 
     Toast.makeText(this, "Service starting onStartCommand", Toast.LENGTH_SHORT).show(); 

     // If we get killed, after returning from here, restart 
     return START_STICKY; 
    } 

    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 

    @Override 
    public void onDestroy() { 
     Toast.makeText(this, "service done", Toast.LENGTH_SHORT).show(); 
     getContentResolver().unregisterContentObserver(mSettingsContentObserver); 
     stopSelf(); 
    } 
} 

Die ContentObserver

public class SettingsContentObserver extends ContentObserver { 
    int previousVolume; 
    Context context; 

    public SettingsContentObserver(Context c, Handler handler) { 
     super(handler); 
     context=c; 

     AudioManager audio = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); 
     previousVolume = audio.getStreamVolume(AudioManager.STREAM_MUSIC); 
    } 

    public SettingsContentObserver(Handler handler) { 
     super(handler); 
    } 

    @Override 
    public boolean deliverSelfNotifications() { 
     return super.deliverSelfNotifications(); 
    } 

    @Override 
    public void onChange(boolean selfChange) { 
     super.onChange(selfChange); 

     AudioManager audio = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); 

     if (audio.getRingerMode() != AudioManager.RINGER_MODE_SILENT){ 
      Toast.makeText(context, "Se ha modificado el volumen", Toast.LENGTH_SHORT).show(); 
     } 
     audio.setRingerMode(AudioManager.RINGER_MODE_SILENT); 

     //In androidManifest --> android.permission.ACCESS_NETWORK_STATE 
     ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 

     if (!mWifi.isConnected()){ 
      Toast.makeText(context, "Esta descontectado el WiFi", Toast.LENGTH_SHORT).show(); 
     }else{ 
      Toast.makeText(context, "Esta conectado el WiFi", Toast.LENGTH_SHORT).show(); 
     } 

    } 
} 

in meinem main_activity Ich habe den Start (myService) und Stopservice (myService)

Antwort

0

Ihr Dienst automatisch getötet wird erhalten, Sobald Ihre App deinstalliert ist. Darüber hinaus ist es nicht möglich, sich bei einer Deinstallationsaktion zu registrieren, wenn das Paket deinstalliert wurde. Sie können nur Uninstall-Broadcasts von anderen Paketen empfangen.

+0

Ooo. Wie kann ich meinen Service sehen? Ich benutze Androis Studio 2.2.3 mit seinem virtuellen Gerät – Tostadora

+0

Sie könnten adb verwenden ... der Befehl wäre: ADB Shell Dumpsys Aktivität Dienste – JacksOnF1re

Verwandte Themen