2017-03-09 11 views
1

Androidプログラミングの初心者として、私は実際にスレッドの使用を習得しておらず、Handler()の機能を習得していません。ボタンをクリックしたら、最初のメソッドstartProjection()を呼び出してから、2番目のメソッドstopProjection()を呼び出す前に数秒待ちます。ボタンをクリックしてアクションを実行するのを待つ方法は?

問題に関するいくつかのトピックを読んで、私は、最初の呼び出しを行うことができますが第二ではない、このコードは、構築された:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    // some code 

    // start projection 
    Button startButton = (Button) findViewById(R.id.startButton); 
    startButton.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      startProjection(); 

      Handler handler = new Handler(); 
      handler.postDelayed(new Runnable() { 
       public void run() { 
        stopProjection(); 
       } 
      }, 7000); 
     } 
    }); 

ビルドのGradleが正常に動作しますが、私は最終的には何も起こりません]ボタンをクリックしたときに。ハンドラが正しく動作しないようです。これらの操作を同じonClick()メソッドで実行するにはどうしますか?

EDIT:これまでは、2つのメソッドが別々に2つのボタンを使用して購入されていましたが、実際は1つのボタンを使用したいと考えています。

+0

このコードは正しいですが、あなたのエラーは何ですか? – Stefan

+1

**ハンドラハンドラ=新しいハンドラ()は、すべてのonClick()コール**でボタンをクリックするたびに新しいハンドラを割り当てます。ハンドラをグローバル変数にするあなたはその場合に得られる違いを見ますか? – ShayHaned

+0

** stopProjection()**メソッドが終了すると、アプリは自動的に終了し、Androidモニターに次のメッセージが表示されます。 E/JavaBinder:!!! FAILED BINDER TRANSACTION !!! W/MediaProjectionManagerService:メディア投影の通知に失敗しました –

答えて

0

別のスレッドでstopProjection()関数を使用する特別な理由があるかどうかを確認したいだけです。

startProjection(); 
Thread.sleep(7000); 
stopProjection(); 
+0

私はすでにこれを試しましたが、UnhandledExceptionEventHandlerのエラーが発生するたびに試しました。 –

関連する問題