有没有办法让我的应用程序活动在用户不活动后回到前台?

时间:2019-02-12 13:59:39

标签: java c# android unity3d service

作为Unity3D开发人员,我已经创建了一个应用程序并将其导出到Android Studio。我的客户要求我在用户不活动10秒后(如果用户打开另一个应用程序)使该应用程序回到前台。我试图创建一个在UnityPlayerActivity的OnPause函数上启动的服务。然后,该服务将检测到用户的不活动状态并再次启动我的应用程序(将其放回前台)。首先,无论如何,我只尝试使用Time.Schedule在10秒后启动我的应用程序,但是每次应用程序暂停(进入后台)时,它都会启动服务,然后崩溃。问题是:有没有简单的方法可以做到这一点?我不是Android Java开发人员(仅了解基础知识),因此我在这部分中苦苦挣扎。

我试图创建此服务,然后尝试在我的活动中从onPause()函数启动它。当我在手机上暂停应用程序时,应用程序崩溃。谁能告诉我我走的路是否正确,请帮我?

public class ReturnToForeground extends Service {
    public ReturnToForeground() {
    }

    // constant
    public static final long NOTIFY_INTERVAL = 10 * 1000; // 10 seconds

    // run on another Thread to avoid crash
    private Handler mHandler = new Handler();
    // timer handling
    private Timer mTimer = null;
    Intent intent = new Intent(this, UnityPlayerActivity.class);
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        // cancel if already existed
        if (mTimer != null) {
            mTimer.cancel();
        } else {
            // recreate new
            mTimer = new Timer();
        }
        // schedule task
        mTimer.scheduleAtFixedRate(new TimeDisplayTimerTask(), 0, NOTIFY_INTERVAL);
        return super.onStartCommand(intent, flags, startId);
    }

    class TimeDisplayTimerTask extends TimerTask {

        @Override
        public void run() {
            // run on another thread
            mHandler.post(new Runnable() {

                @Override
                public void run() {
                    // do action
                    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    intent.setAction(Intent.ACTION_MAIN);
                    intent.addCategory(Intent.CATEGORY_LAUNCHER);
                    startActivity(intent);
                }

            });
        }
    }
}

1 个答案:

答案 0 :(得分:0)

为应用程序处于onPause()中设置一个计时器,当计时器达到10秒时,您应该传递一个意图,该意图将使您的应用程序再次处于活动状态(例如,将用户带回到主视图)。您可以将应用程序的当前数据保存在共享的首选项中,这样在大多数情况下信息都不会丢失。

在许多情况下,当您尝试重新加载的资源在应用程序内不再处于活动状态时,就会出现此问题。

从您共享的信息来看,您似乎没有正确启动该服务。如果您可以添加崩溃日志,以便我们可以对其进行调试并查看问题出在哪里,那就太好了。