Android - 通过服务让应用程序保持专注

时间:2014-04-10 21:50:52

标签: android android-intent android-activity android-service android-service-binding

我有一个孩子的应用程序,我想阻止他们访问手机功能。它必须坚如磐石,只是避免意外退出。

我正在使用的方法是启动一项服务来监视我的Activity何时失焦,然后重新启动它。我已经按照指南进行了操作:

http://nathanael.hevenet.com/android-dev-detecting-when-your-app-is-in-the-background-across-activities/

这个想法是你的活动绑定到onStart中的服务,并在onStop()期间取消绑定。当最后一个活动解除绑定时,会在服务中调用onUnbind,然后重新启动Activity。

继承人的活动:

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不会再次发生,因此当Activity停止时LockService.onUnbind不会发生。链接丢失了。

现在,我确实有这个工作,但我已经改变了一些东西并打破了它。也许我重新启动Activity的方式?我希望在它工作时我将它检入SVN!

感激不尽的任何帮助。

由于

编辑:以下是我从MenuActivity:

启动服务的方式
public static void StartLockService() {
    Context context = getApplicationContext();
    Intent intent = new Intent(context, LockService.class);
    context.startService(intent);
}

1 个答案:

答案 0 :(得分:0)

好的,我已经知道了,感谢Android Service: onBind(Intent) and onUnbind(Intent) is called just once

看起来我需要从onUnbind返回true表示我想要onRebind通知。

然后我可以将我的应用重新聚焦在onRebind上。