0

実行時に遅延関数を実行したいアクティビティがあります。機能の遅延は[i]したくない[/i OnClick]。アクティビティの[i]開始[/i]を遅らせたい.

私は次の解決策を試しました:

  1. AndroidのonClick機能で遅延を設定する方法
  2. Androidで一時停止/遅延する方法は?
  3. Android: タイマー/遅延の代替
  4. Android タイマー設定遅延

...さらにいくつかありますが、どれも私が望むものではありませんでした。アクティビティの開始時 (私のプロジェクトでは、ゲームの開始時) に遅延が必要ですが、そのコードを使用すると、画面に指を置くと遅延 (たとえば 10 秒) が開始されます。

4

1 に答える 1

2

onCreate(..) 関数の「setContentView(R.layout.xxxx..)」の前にThread.sleep(long)を配置する必要があります。そのようにして、アクティビティの要素を表示する前に実際に遅延します。

onCreate(...) が起動される前でも遅らせたい場合は、アプローチを変える必要があります。ここに 1 つの提案があります。

サービスを実行し、ActivityManager クラスを使用してフォアグラウンド アプリケーションを確認します (以下のサンプル コードを参照)。アプリがいつ起動されるか、「フォアグラウンド」に移動されるかを確認し続け (以下のコードを使用)、ホーム画面に戻って (サービス自体で) タイマーを開始します。タイマーが切れたら、アプリを起動します。

サービスの AsyncTask 内で以下の関数を実行できます。

2 つのアプローチはまったく異なり、正確に何を達成しようとしているかによって異なります。

@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 

    }
于 2014-02-08T11:01:59.983 に答える