首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >若要使用复选框将背景音乐从1个活动停止到另一个活动?

若要使用复选框将背景音乐从1个活动停止到另一个活动?
EN

Stack Overflow用户
提问于 2015-04-08 03:30:30
回答 1查看 81关注 0票数 0

我的主要活动有一个背景音乐,我想通过一个复选框随时停止它。我已经有了代码,以便将背景音乐设置为主要活动,而且它的工作非常完美。问题是,我想用CheckBox阻止另一个活动中的特定歌曲。我配置了复选框,但是它不起作用。有人真的很感激。

PD:这两项活动之间的沟通很好。不起作用的是复选框

这是我的密码。

MainActivity.java

`

代码语言:javascript
复制
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

代码语言:javascript
复制
 <?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

代码语言:javascript
复制
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);

    }
}
EN

回答 1

Stack Overflow用户

发布于 2015-04-08 06:20:03

伙计,你不该这样做.您不能使两个活动与静态字段相互通信:)当您更改music_checkedSetttingsActivity中的值时,这在MainActivity中没有任何改变。

我的建议是创建一个运行音乐的Service。这两个活动都应该正确地绑定到服务并操作音乐回放。

Update1

使用此静态字段实现的通信只在一个方向工作。您不能通过更改music_checked属性来停止音乐。它是SettingsActivity类的属性,MainActivity实例不知道它的状态。

实现这一点的正确方法是使用播放音乐的Service。如果要在活动暂停/停止后继续播放音乐,则从Activity播放音乐是不正确的。创建一个绑定服务,并将每个活动绑定到其onResumeonStart方法中的服务(并在onPause/onStop中取消绑定)。通过绑定到服务,您将收到一个公开一些API的对象(您必须定义这个API并根据您希望拥有的功能创建该对象)。使用此API,您可以从这两个活动中控制服务。

我建议您阅读更多关于android中的活动和服务及其生命周期的内容。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29505425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档