1

私はAndroidでアプリを構築しています。現在、メイン、ミュージック、設定の3つのクラスがあります。アプリを終了すると停止するように、アプリに音楽を入れようとしています。私はその部分をやった。

また、音楽のオン/オフを制御する設定クラスにトグル ボタンがあり、アプリが音楽がオフかオンかを記憶するために SharedPreferences を使用しています。アプリに入ってそこにとどまるとすべてが機能し、オフ状態では実際に音楽がオフになり、オン状態では彼女がオンになりますが、問題は、メインクラスを終了して再度音楽の再生を開始するときです。メインクラスでトグルボタンがチェックされているかどうかを確認する方法はありますか? 私は何も見つかりません...

その他の問題、電話がミュート状態のときに音楽をミュートするにはどうすればよいですか? このサイトで切り替え方法を見ましたが、うまくいきませんでした。どんな助けでも素晴らしいでしょう!

クラスは次のとおりです。

主要-

public class Main extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Music.play(this, R.raw.pirates);
}

public void setting_onclick(View view) {
       Intent i = new Intent("net.lirazarviv.Setting");
       startActivity(i);
   }

@Override
  protected void onPause() {
    if (this.isFinishing()){ //basically BACK was pressed from this activity
      Music.stoping();

    }
    Context context = getApplicationContext();
    ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    List<RunningTaskInfo> taskInfo = am.getRunningTasks(1);
    if (!taskInfo.isEmpty()) {
      ComponentName topActivity = taskInfo.get(0).topActivity; 
      if (!topActivity.getPackageName().equals(context.getPackageName())) {
        Music.stoping();
      }
    }
    super.onPause();
  }
}

音楽-

public class Music {
private static MediaPlayer mp = null;

public static void play(Context context, int resource) {
         mp = MediaPlayer.create(context, resource);
         mp.setLooping(true);
         mp.start();
      }

public static void stop(Context context) { 
      if (mp != null) {
         mp.stop();
         mp.pause();
         mp.release();
         mp = null;
      }
   }


public static void playing() {
        mp.start();
}

public static void stoping() {
         mp.pause();

}
}

設定-

public class Setting extends Activity {
ToggleButton Button;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_setting);
    addListenerOnButton();
    loadPrefs();
}

public void addListenerOnButton() {

    Button = (ToggleButton) findViewById(R.id.MusicIconSelector);
    Button.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (isChecked) {
                Music.stoping();
                savePrefs("Button",true);
            }
            else { 
                Music.playing();
                savePrefs("Button",false);
            }
        }
    });
}

private void loadPrefs() {
            SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
            boolean cbValue = sp.getBoolean("Button", false);
            if(cbValue){
                Button.setChecked(true);
            }else{
                Button.setChecked(false);
            }
        }


private void savePrefs(String key, boolean value) {
            SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
            Editor edit = sp.edit();
            edit.putBoolean(key, value);
            edit.commit();
        }

}

4

1 に答える 1

0

使用する代わりに、Context.getSharedPreferencesPreferenceManager.getDefaultSharedPreferencesを使用できます。これを使用すると、任意のコンポーネントから同じ共有設定に読み書きできます。例として

SharedPreferences sp = getSharedPreferences(name, MODE_PRIVATE);

name任意のアクティビティから共有設定にアクセスできます。

于 2013-05-18T05:43:47.907 に答える