参考サイトを見て実装しようとしてるのですが、3.Activityが起動したら、アラーム音再生のServiceを起動。4.Serviceが起動したらアラーム音を鳴らす。がうまくいきません。
下記のようなコードなのですがアクティビティが起動しても音が再生されません。
よろしくお願いします。
import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.view.WindowManager; import android.widget.Button; public class PlaySoundActivity extends AppCompatActivity { Button stop; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_play_sound); startService(new Intent(this, PlaySoundService.class)); stop = (Button) findViewById(R.id.stop); stop.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { stopService(new Intent(PlaySoundActivity.this, PlaySoundService.class)); } }); } }
import android.app.Service; import android.content.Intent; import android.media.AudioManager; import android.media.MediaPlayer; import android.net.Uri; import android.os.IBinder; import android.support.annotation.Nullable; import android.support.annotation.RawRes; import java.io.IOException; public class PlaySoundService extends Service implements MediaPlayer.OnCompletionListener{ MediaPlayer mediaPlayer; float volume = 0.3f; public PlaySoundService() { } @Override public void onCreate() { super.onCreate(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { mediaPlayer = new MediaPlayer(); play(); return START_NOT_STICKY; } @Override public void onDestroy() { super.onDestroy(); stop(); } @Nullable @Override public IBinder onBind(Intent intent) { return null; } // 再生 private void play() { try { Uri uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM); mediaPlayer.reset(); mediaPlayer.setDataSource(this, uri); mediaPlayer.setVolume(volume, volume); mediaPlayer.setAudioStreamType(AudioManager.STREAM_ALARM); mediaPlayer.setOnCompletionListener(this); mediaPlayer.prepare(); mediaPlayer.start(); } catch (IOException e) { e.printStackTrace(); } } // 停止 private void stop() { if (mediaPlayer != null) { mediaPlayer.stop(); mediaPlayer.release(); mediaPlayer = null; } } private Uri getVideoUri(@RawRes int resId){ return Uri.parse("android.resource://" + getPackageName() +"/" + resId); } // 再生が終わる度に音量を上げてループ再生 @Override public void onCompletion(MediaPlayer mediaPlayer) { volume += 0.1f; play(); } }
あなたの回答
tips
プレビュー