繁体   English   中英

如何使用 Switch 开启和关闭背景音乐?

[英]How to on and off background music using Switch?

我目前正在开发一个移动应用程序,作为我课程的最终项目。 我的问题是我无法使用开关控制我在应用程序中应用的背景音乐。 我使用该服务在我的整个应用程序中播放它。 当我单击主页按钮时,我也遇到了问题。 音乐还在播放。 我搜索了很多教程,但它仍然不起作用。

我希望你能帮助我解决我的问题。 始终保持安全,我的开发人员。

后台服务

package com.example.biowit;

import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;

public class BgMusicService extends Service {

    MediaPlayer player;

@Override
public IBinder onBind(Intent intent) {

    return null;
}

@Override
public void onCreate() {

    super.onCreate();
    player = MediaPlayer.create(this, R.raw.bg_music);
    player.setLooping(true);
    player.setVolume(100, 100);
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {

    player.start();
    return super.onStartCommand(intent, flags, startId);
}

@Override
public void onDestroy() {
    super.onDestroy();
    player.stop();
    player.release();
}

@Override
public void onLowMemory() {
    super.onLowMemory();
}

}

主屏幕(背景音乐开始播放的地方)

package com.example.biowit;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;

import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;

import com.google.firebase.auth.FirebaseAuth;

public class HomeScreen extends AppCompatActivity {
Button Chap1_btn, Achieve_btn, HowToPlay_btn, LogOut_btn, Settings_btn;
FirebaseAuth home_FbAuth;

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_home_screen);

    Chap1_btn = findViewById(R.id.btn_Chap1);
    Achieve_btn = findViewById(R.id.btn_Achievements);
    HowToPlay_btn = findViewById(R.id.btn_HowToPlay);
    LogOut_btn = findViewById(R.id.btn_Logout);
    Settings_btn = findViewById(R.id.btn_Settings);

    home_FbAuth = FirebaseAuth.getInstance();

    startService(new Intent(this, BgMusicService.class));

    Chap1_btn.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            Intent open_Chap1 = new Intent(getApplicationContext(), LessonScreen.class);
            startActivity(open_Chap1);
        }
    });

    LogOut_btn.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            home_FbAuth.signOut();
            startActivity(new Intent(getApplicationContext(), LoginScreen.class));
            finish();
        }
    });

    Settings_btn.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            Intent open_Settings = new Intent(getApplicationContext(), Settings.class);
            startActivity(open_Settings);
        }
    });
}

}

设置(找到开关的位置)

package com.example.biowit;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.Switch;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;

public class Settings extends AppCompatActivity {
Button Back_ST_btn, AboutUs_btn, VerEmail_btn, Res_Pass_btn, Con_Res_btn, Cancel_Res_btn;
TextView VerEmail_txt;
EditText NewPass_input, CoNewPass_input;
FirebaseAuth set_FbAuth;
FirebaseUser set_FbUser;
String respass_set, conpass_set;
Switch Music_swch;

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_settings);

    AboutUs_btn = findViewById(R.id.btn_AboutUs);
    Back_ST_btn = findViewById(R.id.btn_ST_Back);
    Res_Pass_btn = findViewById(R.id.btn_Reset_Pass);
    Con_Res_btn = findViewById(R.id.btn_Confirm_Reset);
    Cancel_Res_btn = findViewById(R.id.btn_Cancel_Reset);
    NewPass_input = findViewById(R.id.txt_New_Pass);
    CoNewPass_input = findViewById(R.id.txt_CoNew_Pass);
    VerEmail_btn = findViewById(R.id.btn_Verify_Email);
    VerEmail_txt = findViewById(R.id.lbl_Verify_Email);
    Music_swch = findViewById(R.id.swch_ST_Music);
    
    set_FbAuth = FirebaseAuth.getInstance();
    set_FbUser = set_FbAuth.getCurrentUser();

    String pass_regex = "^(?=.*[a-zA-Z])(?=.*[@#$%^&+=])(?=\\S+$).{6,}$";

    Music_swch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

            if(Music_swch.isChecked()){
               //???
            }

            else{
                //???
            }

        }
    });

    //When email is not verified, a message and button will appear.
    if (!set_FbAuth.getCurrentUser().isEmailVerified()){

        VerEmail_txt.setVisibility(View.VISIBLE);
        VerEmail_btn.setVisibility(View.VISIBLE);
    }

    //When the "Verify Now" button is clicked, a verification email will be sent to the user's email address.
    VerEmail_btn.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            //send verificaton email
            set_FbAuth.getCurrentUser().sendEmailVerification().addOnSuccessListener(new OnSuccessListener<Void>() {

                @Override
                public void onSuccess(Void unused) {
                    Toast.makeText(getApplicationContext(),"Verification Email sent.", Toast.LENGTH_LONG).show();
                    VerEmail_txt.setVisibility(View.GONE);
                    VerEmail_btn.setVisibility(View.GONE);
                }
            });
        }
    });

    Res_Pass_btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) { // opens reset password.

            NewPass_input.setVisibility(View.VISIBLE);
            CoNewPass_input.setVisibility(View.VISIBLE);
            Con_Res_btn.setVisibility(View.VISIBLE);
            Cancel_Res_btn.setVisibility(View.VISIBLE);
        }
    });

    Cancel_Res_btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) { // cancels reset password.
            NewPass_input.setVisibility(View.GONE);
            CoNewPass_input.setVisibility(View.GONE);
            Con_Res_btn.setVisibility(View.INVISIBLE);
            Cancel_Res_btn.setVisibility(View.INVISIBLE);
        }
    });

    Con_Res_btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            respass_set = NewPass_input.getText().toString();
            conpass_set = CoNewPass_input.getText().toString();

            if(respass_set.isEmpty()){ //  if new password field is empty, error message will be shown.
                NewPass_input.setError("This field cannot be empty.");
                return;
            }

            if(respass_set.matches(pass_regex)){ // if new password is weak and not follows the certain , this error message will be shown.
                NewPass_input.setError("Password is too weak. Password must contain at least 6 characters with at least one digit and a special character.");
                return;
            }

            if(conpass_set.isEmpty()){ //  if confirm password field is empty, error message will be shown.
                CoNewPass_input.setError("This field cannot be empty.");
                return;
            }

            if (!conpass_set.equals(respass_set)){ //  if the confirm password is not equals to new password, error message will be shown.
                CoNewPass_input.setError("Password does not match.");
                return;
            }

            set_FbUser.updatePassword(respass_set).addOnSuccessListener(new OnSuccessListener<Void>() {

                @Override
                public void onSuccess(Void unused) {

                    Toast.makeText(getApplicationContext(),"New Password saved.", Toast.LENGTH_LONG).show();
                    NewPass_input.setVisibility(View.GONE);
                    CoNewPass_input.setVisibility(View.GONE);
                    Con_Res_btn.setVisibility(View.INVISIBLE);
                }
            }).addOnFailureListener(new OnFailureListener() {

                @Override
                public void onFailure(@NonNull Exception e) {

                    Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_LONG).show();
                }
            });
        }
    });

    AboutUs_btn.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) { // opens "About Us" screen.
            startActivity(new Intent(getApplicationContext(), AboutUsScreen.class));
        }
    });

    Back_ST_btn.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) { // returns to previous screen.

            finish();
        }
    });
}



public void PlayBackgroundSound(View view){

    startService(new Intent(this, BgMusicService.class));
}

}

没有遇到错误日志。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM