Ich möchte einen laufenden Dienst in Android starten, die überprüft, welche Anwendung im Hintergrund ist. Wenn sich die Vordergrundanwendung in der Datenbank meiner App befindet, öffnet sich ein Passwortbildschirm, um das Passwort einzugeben.Starten Sie immer Dienst
Was ich erreicht habe, ist, dass mein Dienst so lange läuft, wie die Anwendung läuft, aber wenn ich die Anwendung stoppe (aus früheren Anwendungen entferne), stoppt mein Dienst. Ich kann die gesperrten Apps öffnen, ohne ein Passwort einzugeben. Ich habe viele Lösungen im Internet versucht, aber keine scheint zu funktionieren. Bitte helfen Sie mir,
package services;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.support.annotation.Nullable;
import android.util.Log;
import android.widget.Toast;
import com.antzion.salmanali.lockapp.FeedReaderContract;
import com.antzion.salmanali.lockapp.FeedReaderDBHelper;
import com.antzion.salmanali.lockapp.PasswordSet;
import com.antzion.salmanali.lockapp.Pattern;
/**
* Created by Salman Majid Ali on 12/26/2016.
*/
public class TestService extends Service {
String [] names;
FeedReaderDBHelper helper;
private AppChecker appChecker;
private String currentLocked = "";
Detector detector;
public TestService()
{
if(Utils.postLollipop())
detector = new LollipopDetector();
else
detector = new PreLollipopDetector();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Toast.makeText(getApplicationContext(), "service Start", Toast.LENGTH_SHORT).show();
System.out.println("StartRemove");
helper = new FeedReaderDBHelper(this);
names = helper.getNames();
Thread t = new Thread(new Runnable() {
@Override
public void run() {
if(!AppChecker.running)
{
startChecker();
}
}
});
t.start();
return START_STICKY;
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onTaskRemoved(Intent rootIntent) {
System.out.println("Remove");
Intent restart=new Intent(getApplicationContext(),this.getClass());
restart.setPackage(getPackageName());
startService(restart);
super.onTaskRemoved(rootIntent);
}
@Override
public void onDestroy()
{
Intent restart=new Intent(getApplicationContext(),this.getClass());
restart.setPackage(getPackageName());
startService(restart);
super.onDestroy();
}
private void startChecker()
{
appChecker = new AppChecker();
appChecker
.when(getPackageName(), new AppChecker.Listener() {
@Override
public void onForeground(String packageName) {
//Toast.makeText(getBaseContext(), "Our app is in the foreground.", Toast.LENGTH_SHORT).show();
}
})
.other(new AppChecker.Listener() {
@Override
public void onForeground(String packageName) {
//System.out.println("Foreground " + packageName);
//System.out.println("In Other " + setting.getBooleanValue(PrefVars.onlock) + " " + setting.getBooleanValue(PrefVars.onLock3) +
// " " + setting.getBooleanValue(PrefVars.lockImmediately));
try {
if(currentLocked != null && !packageName.equals(currentLocked)
&& !helper.isLocked(currentLocked)
&& helper.getValue(FeedReaderContract.FeedEntry.onexit).equals("YES"))
{
Log.i("Locking ", currentLocked);
helper.lock(currentLocked);
}
if(helper.getPackageName(packageName))
{
//System.out.println(packageName + "App is in the Database");
if(helper.isLocked(packageName))
{
System.out.println("UnLocking " + packageName);
getPassword(packageName);
currentLocked = packageName;
}
}
}catch(Exception e)
{
}
//Toast.makeText(getBaseContext(), "Foreground: " + packageName, Toast.LENGTH_SHORT).show();
}
})
.start(this);
}
private void getPassword(String pack)
{
int i = helper.getPassOrPat();
boolean pass = false;
if(i == 1)
pass = true;
else
pass = false;
if(pass)
{
Intent intent = new Intent(this, PasswordSet.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("PASS", pack);
intent.putExtra("CONFIRM", "YES");
startActivity(intent);
}
else
{
Intent intent = new Intent(this, Pattern.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("PASS", pack);
intent.putExtra("CONFIRM", "YES");
startActivity(intent);
}
}
}
I AppChecker Klasse Code zur Verfügung stellen können, wenn Sie wollen. Bitte lassen Sie mich wissen, was ich tun soll, um die gewünschten Ergebnisse zu erzielen. Ich werde dir sehr dankbar sein.
Haben Sie versucht, Ihren Code in OnCreate of Service zu verschieben, da wenn Service neu erstellt wird, immer OnC aufrufen reate –
An welchem Gerät testeest du? –
Hallo, danke David für deine Antwort. Ich teste es auf HUAWEI TAG-L21 laufenden Android 5.1. Der Dienst wird beendet, wenn die App von den letzten Apps kopiert wird. –