Итак, я создаю шкаф для приложений для android.Ive написал службу для моей активности в режиме блокировки для запуска, как только определенное действие обнаружено сверху приложения Android stack.The список приложений для блокировки хранятся в таблице в базе данных. По большей части моя служба работает отлично. Но я сталкиваюсь с некоторыми проблемами, которые я не знаю, как их преодолеть. Любая помощь с благодарностью принимаетсязапуск/отмена активности немедленно, когда условия выполняются в службе
Я хочу решить следующие проблемы.
1) Когда я нажимаю кнопку «Назад», я хочу, чтобы моя активность в шкафчике и приложение было заблокировано, чтобы прекратить выполнение. В моем случае активность locker продолжает запускаться снова и снова, когда я нажимаю кнопку «Назад».
2) Когда определенное приложение, которое должно быть заблокировано, приложение отображается на экране в течение 1 секунды или 2 до того, как моя операция в ящике будет вызвана. Мне нужно, чтобы моя активность в ящике вызывалась напрямую.
3) И несколько раз моя деятельность в шкафчике вызывается снова, как только пользователь уже проверил себя, чего не хочет. (Я думаю, что это причина сроков службы для проверки переднего плана деятельности)
Моя_службы
public class LockerService extends Service {
private static final String TAG = "MyService";
String LockedApps[];
String allowedapp = null;
DataBaseHandler handler;
private final static Handler servicehandler = new Handler() {
@Override
public void handleMessage(Message msg) {
}
};
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
handler = new DataBaseHandler(this);
}
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
private Runnable checkforeground = new Runnable() {
public void run() {
///Any thing you want to do put the code here like web service
// procees it will run in ever 1 second
handler.open();
LockedApps = handler.getPackages();
handler.close();
ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> runningAppProcessInfo = am
.getRunningAppProcesses();
String foregroundapp = runningAppProcessInfo.get(0).processName
.toString();
SharedPreferences sp = PreferenceManager
.getDefaultSharedPreferences(LockerService.this);
allowedapp = sp.getString("allowedapp", "anon");
if ((Arrays.asList(LockedApps).contains(foregroundapp))
&& (allowedapp.equals(foregroundapp))) {
// do nothing
} else if (Arrays.asList(LockedApps).contains(foregroundapp)) {
// show your activity here on top of
// PACKAGE_NAME.ACTIVITY_NAME
Intent lockIntent = new Intent(getBaseContext(), Locker.class);
lockIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getBaseContext().startActivity(lockIntent);
}
servicehandler.postDelayed(this, 1500); // 1.5 seconds
}
};
@Override
public void onStart(Intent intent, int startId) {
servicehandler.removeCallbacks(checkforeground);
servicehandler.postDelayed(checkforeground, 1500);// 1.5 second
Log.d(TAG, "onStart");
}
}