2014-11-15 4 views
0

Итак, я создаю шкаф для приложений для 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"); 
} 

} 

ответ

1

Только метод Override onBackPressed() в шкафчике деятельности и огнь намерения к домашнему пусковой установке. это не что иное, как это приведет вас к главному экрану.

Смежные вопросы