我有一个活动,我想在运行时运行延迟功能。我[i]不希望延迟OnClick
功能,我想在活动[i]开始时延迟[/ i]。
我尝试了以下解决方案:
......还有一些和无他们做了我想要的。我希望在活动开始时(对于我的项目,当游戏开始时)延迟但是使用那些代码,当我将手指放在屏幕上时,它会启动延迟(例如10秒)。
答案 0 :(得分:2)
您应该在onCreate(..)函数中的“setContentView(R.layout.xxxx ..)”之前放置一个Thread.sleep(long)。这样,在向您显示活动的元素之前,它实际上会延迟。
如果你想在onCreate(...)被触发之前推迟,那么这个方法需要有所不同,这里有一个建议:
运行服务并使用ActivityManager类检查Foreground应用程序(请参阅下面的示例代码)。继续检查您的应用程序何时被触发或被带到“前台”(使用下面的代码),然后返回主屏幕&启动一个计时器(在服务本身)。计时器到期后,启动您的应用程序。
您可以在服务中的AsyncTask内运行以下功能。
这两种方法完全不同,实际上取决于您希望实现的目标。
@SuppressWarnings("deprecation")
private void getRunningAppName() throws NameNotFoundException {
Log.v("neiltag", "Entered getRunningAppName()");
ActivityManager am = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);
// The first in the list of RunningTasks is always the foreground task.
RunningTaskInfo foregroundTaskInfo = am.getRunningTasks(1).get(0);
String foregroundTaskPackageName = foregroundTaskInfo .topActivity.getPackageName();
PackageManager pm = this.getPackageManager();
PackageInfo foregroundAppPackageInfo = pm.getPackageInfo(foregroundTaskPackageName, 0);
String foregroundTaskAppName = foregroundAppPackageInfo.applicationInfo.loadLabel(pm).toString();
String packageName = foregroundAppPackageInfo.packageName;
if(foregroundTaskAppName.matches("<NAME OF YOUR APP HERE>")) {
//If your app is fired go back to the Homescreen(i.e. the delay)
Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(startMain);
handler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(), "You are not allowed to open Facbeook now, sorry!", Toast.LENGTH_SHORT).show();
}
});
}
//ADD A TIMER HERE
//ONCE TIMER EXPIRES, FIRE UP YOUR APP AGAIN
}