当前位置: 代码迷 >> java >> 有没有办法让我的应用程序活动在用户不活动后回到前台?
  详细解决方案

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

热度:28   发布时间:2023-07-26 14:23:24.0

作为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);
                }

            });
        }
    }
}

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

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

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

  相关解决方案