我有一个开始活动,该活动正在使用服务播放背景音乐,并且5秒钟后加载了另一个活动。 问题在于第二个活动中声音无法加载或服务无法正常工作...我不确定发生了什么。
在应用启动时,声音会在第一个活动中起作用。
这是第一个活动:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//remove window title and make it fullscreen
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
//bind activity
setContentView(R.layout.start_activity);
ButterKnife.bind(this);
Intent intent = new Intent(StartActivity.this, SoundService.class);
intent.putExtra("filename", "audiostart");
//start service and start music
startService(intent);
int TIME_OUT = 5000;
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Intent i = new Intent(StartActivity.this, AvatarsActivity.class);
startActivity(i);
finish();
}
}, TIME_OUT);
Log.d(TAG, "APP Started!");
}
@Override
protected void onDestroy() {
//stop service and stop music
stopService(new Intent(StartActivity.this, SoundService.class));
super.onDestroy();
}
第二项活动:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.avatars_activity);
ButterKnife.bind(this);
Intent intent = new Intent(AvatarsActivity.this, SoundService.class);
intent.putExtra("filename", "audioavatars");
//start service and start music
startService(intent);
}
@Override
protected void onDestroy() {
//stop service and stop music
stopService(new Intent(AvatarsActivity.this, SoundService.class));
super.onDestroy();
}
这是服务:
@Override
public IBinder onBind(Intent intent) {
return null;
}
public void onCreate() {
player = MediaPlayer.create(this, R.raw.audio);
player.setLooping(false);
}
public int onStartCommand(Intent intent, int flags, int startId) {
if(intent != null){
String mFilename = intent.getStringExtra("filename");
Toast toast = Toast.makeText(getApplicationContext(), "Filename: " + mFilename, Toast.LENGTH_SHORT);
toast.show();
}
player.start();
return Service.START_NOT_STICKY;
}
public void onDestroy() {
player.stop();
player.release();
stopSelf();
super.onDestroy();
}
当我在第一个活动中经过5秒后加载第二个活动时,我想要背景声音。
第二个问题是我想在服务中的onCreate方法中传递变量,并根据活动播放什么声音。 (我认为我可以完成此任务,但询问意见如何执行并不会受到伤害)
答案 0 :(得分:0)
您的代码似乎正常。但是,您是否已在清单文件中注册了服务?请检查您的清单。您的服务未注册可能是原因。
答案 1 :(得分:0)
您将在延迟5秒后开始第二个活动,并在排队意图之后立即在第一个活动上调用finish(),这将触发同一活动的onDestroy回调。在第一个活动的onDestroy()中,您实现了停止服务,这导致服务停止。
在两个活动中都删除onDestroy()的实现,并向用户提供一种显式停止服务的方法(单击按钮或其他方法),而不是在活动生命周期回调中执行该操作。