2014-07-08 4 views
0

자명종으로 작동하는 앱을 제작하려고합니다. 나는 AlarmManager의 도움으로 모든 것을 구현했으며 제대로 작동합니다. 하지만 하나의 문제가 있습니다. 알람이 울리면 버튼이있는 화면과 사운드가 재생되는 활동이 시작됩니다. 하지만 검은 색 화면 만 표시하고 진동 + 소리를 재생 한 후 경보 화면을 표시합니다.활동이 보이지 않습니까?

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.wecker); 
    laufen = true; 
    mp = MediaPlayer.create(getApplicationContext(), R.raw.ton); 
    verstanden =(Button)findViewById(R.id.button1); 
    verstanden.setOnClickListener(new View.OnClickListener() {public void onClick(View view) 
    { 
     finish(); 
    } 
    }); 
    for (int i=0; i<10;i++) 
    { 
    mp.start(); 
    Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); 
    v.vibrate(1000); 
    try { 
     Thread.sleep(1000); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 
    } 
} 

}

내가 활동을 보여주고 동시에 사운드를 재생하기 위해 무엇을 할 수 있는가?

+0

'Thread.sleep (1000);'이걸 제거하면 예상대로 작동합니까? – petey

답변

1

Thread.sleep(1000); UI 스레드를 차단하므로 검은 색 화면이 표시됩니다.

사용이 : 당신은 당신의 UI 스레드에 당신의 onCreate() 방법에 Thread.sleep(1000);을 넣어 가지고

new Thread(new Runnable() { 
    public void run() { 
     try { 
     // Add loop to play music and vibrate here 

     } catch (InterruptedException ie) {} 
    } 
) }.start(); 
+0

몇 가지 예외를 제외하고 UI 스레드에서 Thread.sleep()을 사용하면 안된다는 점에 유의해야합니다. – kwierman

+1

@ user2950041 - 어떤 예외가 있습니까? 나는 어떤 것도 생각할 수 없다. – OrhanC1

+0

대단히 감사합니다. :) – user3817175

0

. 활동의 UI는 에만 나타나며 onCreate() 이후이므로 수면 명령이 끝날 때까지 거기에 도착하지 않습니다. 새 Thread을 만들고 진동기/수면주기를 Thread에 실행해야합니다. 사용법은 Shivam Verma의 답변에 나와 있습니다.

관련 문제