У меня есть приложение для детей, в котором я хочу запретить им доступ к функциям телефона. Он не обязательно должен быть надежным, просто избегайте случайных выходов.
Подход, который я использую, состоит в том, чтобы запустить службу для мониторинга, когда моя активность выходит из фокуса, а затем перезапускает ее. Я следовал руководству здесь:
Идея заключается в том, что ваша активность привязывается к службе в onStart и отвязывается во время onStop(). Когда последнее действие отсоединяется, в службе вызывается onUnbind, из которого я перезапускаю действие.
Вот активность:
public class GameActivity extends Activity {
@Override
public void onStart() {
super.onStart();
// Next call always returns true
bindService( new Intent( this, LockService.class ),
mConnection, Context.BIND_AUTO_CREATE );
}
@Override
public void onStop() {
super.onStop();
unbindService( mConnection );
}
private ServiceConnection mConnection = new ServiceConnection() {
public void onServiceConnected( ComponentName cn, IBinder service ) {}
public void onServiceDisconnected( ComponentName cn ) {}
};
}
А вот Сервис:
public class LockService extends Service {
@Override
public void onCreate() {
super.onCreate();
refocus();
}
private void refocus() {
// Launch the monitored Activity
Intent intent = new Intent(getBaseContext(), GameActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
@Override
public boolean onUnbind( Intent intent ) {
// Relaunch
refocus();
return false;
}
@Override
public IBinder onBind( Intent intent ) {
return mBinder;
}
public class LocalBinder extends Binder {
LockService getService() {
return LockService.this;
}
}
private final IBinder mBinder = new LocalBinder();
}
Это работает, но только один раз. Когда GameActivity закрывается или сворачивается, вызывается LockService.onUnbind.
Это перезапускает GameActivity, который пытается снова привязаться к службе. Он возвращает true, но LockService.onBind не происходит во второй раз, и, следовательно, LockService.onUnbind не происходит, когда Activity останавливается. Ссылка потеряна.
Теперь у меня ОПРЕДЕЛЕННО это работало, но я что-то изменил и сломал его. Возможно, так я перезапускаю Activity? Хотел бы я проверить это в SVN, когда это сработало!
Любая помощь принята с благодарностью.
Спасибо
РЕДАКТИРОВАТЬ: Вот как я запускаю службу из MenuActivity:
public static void StartLockService() {
Context context = getApplicationContext();
Intent intent = new Intent(context, LockService.class);
context.startService(intent);
}