作为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);
}
});
}
}
}
答案 0 :(得分:0)
为应用程序处于onPause()中设置一个计时器,当计时器达到10秒时,您应该传递一个意图,该意图将使您的应用程序再次处于活动状态(例如,将用户带回到主视图)。您可以将应用程序的当前数据保存在共享的首选项中,这样在大多数情况下信息都不会丢失。
在许多情况下,当您尝试重新加载的资源在应用程序内不再处于活动状态时,就会出现此问题。
从您共享的信息来看,您似乎没有正确启动该服务。如果您可以添加崩溃日志,以便我们可以对其进行调试并查看问题出在哪里,那就太好了。