我的主要活动有一个背景音乐,我想通过一个复选框随时停止它。我已经有了代码,以便将背景音乐设置为主要活动,而且它的工作非常完美。问题是,我想用CheckBox阻止另一个活动中的特定歌曲。我配置了复选框,但是它不起作用。有人真的很感激。
PD:这两项活动之间的沟通很好。不起作用的是复选框
这是我的密码。
MainActivity.java
`
public class MainActivity extends Activity implements View.OnClickListener {
MediaPlayer bkgrdmsc;
private int lmusic_checked = SettingsActivity.music_checked;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (lmusic_checked == 0){
bkgrdmsc = MediaPlayer.create(MainActivity.this, R.raw.backgroundmusic);
bkgrdmsc.setLooping(true);
bkgrdmsc.start();
}
@Override
protected void onPause() {
if (lmusic_checked == 0){
bkgrdmsc.release();
}
SettingsActivity.music_checked =0;
super.onPause();
bkgrdmsc.release();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//inflate the menu; this adds items to the action bar if this is present
super.onCreateOptionsMenu(menu);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
Intent s_intent = new Intent(this, SettingsActivity.class);
startActivity(s_intent);
return true;
}
else if (id == R.id.logo_home){
Intent t_intent = new Intent(this, Twitter.class);
startActivity(t_intent);
return true;
}
return super.onOptionsItemSelected(item);
}activity_settings.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:weightSum="1">
<TextView
android:layout_width="271dp"
android:layout_height="77dp"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="@string/c_general"
android:id="@+id/textView"
android:layout_gravity="center_vertical"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="57dp"
android:textSize="26dp" />
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/turn_on_music"
android:id="@+id/CheckBox"
android:layout_below="@+id/textView"
android:layout_centerHorizontal="true"
android:checked="false"
android:singleLine="false"
android:textColor="#000000" />
</RelativeLayout>SettingsActivity.java
package com.example.json.publicomidas;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.CheckBox;
import android.widget.CompoundButton;
public class SettingsActivity extends Activity {
public static int music_checked= 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.action_settings);
music_off();
}
public void music_off(){
CheckBox checkBox1 = (CheckBox) findViewById(R.id.CheckBox);
checkBox1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (buttonView.isChecked()) {
music_checked = 1;
} else {
music_checked = 0;
}
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//inflate the menu; this adds items to the action bar if this is present
super.onCreateOptionsMenu(menu);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_settings, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.home) {
Intent s_intent = new Intent(this, MainActivity.class);
startActivity(s_intent);
return true;
}
return super.onOptionsItemSelected(item);
}
}发布于 2015-04-08 06:20:03
伙计,你不该这样做.您不能使两个活动与静态字段相互通信:)当您更改music_checked在SetttingsActivity中的值时,这在MainActivity中没有任何改变。
我的建议是创建一个运行音乐的Service。这两个活动都应该正确地绑定到服务并操作音乐回放。
Update1
使用此静态字段实现的通信只在一个方向工作。您不能通过更改music_checked属性来停止音乐。它是SettingsActivity类的属性,MainActivity实例不知道它的状态。
实现这一点的正确方法是使用播放音乐的Service。如果要在活动暂停/停止后继续播放音乐,则从Activity播放音乐是不正确的。创建一个绑定服务,并将每个活动绑定到其onResume或onStart方法中的服务(并在onPause/onStop中取消绑定)。通过绑定到服务,您将收到一个公开一些API的对象(您必须定义这个API并根据您希望拥有的功能创建该对象)。使用此API,您可以从这两个活动中控制服务。
我建议您阅读更多关于android中的活动和服务及其生命周期的内容。
https://stackoverflow.com/questions/29505425
复制相似问题