1

サービスのループでサウンド ファイルを実行しています。

サービスを開始するアクティビティにもボタンがあります。ボタンを押すと、サービスのサウンド ファイルの再生を停止します。つまり、サービスを強制終了します。私が呼び出しstopService()たときにサービスが引き続き実行されている限り、これまでのところ失敗しています。

何か案は?ありがとう。

アクティビティ

public class AlarmPage extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_alarm_page);
    TextView timeview = (TextView)findViewById(R.id.timefiled);
    final Button dismissButton =(Button)findViewById(R.id.dismissButton);
    Bundle b = getIntent().getExtras();
    String hrval = b.getString("HR");
    String minval = b.getString("MN");
    timeview.setText(hrval + ":" + minval);

    final Intent alarmring = new Intent(this, alarmringService.class);

    startService(alarmring);
    dismissButton.setOnClickListener(new OnClickListener(){

        @Override
        public void onClick(View v) {

            // TODO Auto-generated method stub
            Intent alarmmenu = new Intent(getApplicationContext(),SetAlarmsActivity.class);
            startActivity(alarmmenu);

            System.out.println("Button:" + dismissButton.isPressed());
            stopService(alarmring);

        }

    });

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.alarm_page, menu);
    return true;
}
}

サービス

public class alarmringService extends IntentService{

public alarmringService(){
    super("alarmringService");
    // TODO Auto-generated constructor stub

}

@Override
protected void onHandleIntent(Intent intent) {
    // TODO Auto-generated method stub


    MediaPlayer mp = MediaPlayer.create(getApplicationContext(), R.drawable.startrekcommsound);
    mp.setLooping(true);
    try {
        mp.prepare();
    } catch (IllegalStateException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }


    mp.start();
}

}
4

1 に答える 1

0

私は専門家ではないので、なぜ機能しないのかわかりませんが、問題を解決するにはインテントを使用できます。ちなみに、IntentService仕事がなくなると止まります!

これを試してください:IntentService自分自身を停止するように指示するコマンドを使用して、インテントに送信します。次に、onHandleIntent()これが要求であるかどうかを確認stopSelf()し、 内から呼び出しますService

さらに、どのように機能するかはわかりませんMediaPlayerが、おそらく彼自身のスレッドがあり、このスレッドも停止する必要があります!

于 2013-07-18T06:19:09.293 に答える