2

ボタンをクリックするとサウンドが再生され、カウント画面を離れてから戻ったときにカウントも保存されます。

ミュート ボタンで問題が発生しました。クリックすると、その特定の GUI 画面 (アクティビティ) だけでなく、アプリケーション全体がミュートされます。

  1. 最初の問題は、ミュート ボタンがアプリ全体のサウンドをミュートすることであり、そのアクティビティに対してのみミュートする必要があります。

  2. 2 つ目の問題は、ミュート ボタンをクリックして画面から出てから戻ってミュートを解除しようとすると、サウンドのミュートが解除されないことです。

これに対する解決策は、インスタンスの状態を保存する SharedPreferences からミュート ボタンを削除することだと考えていました。これが可能であれば...

これまでの私のコードは次のとおりです。上記を達成する方法を教えていただければ幸いです。ありがとう。

public class wazeefa extends Activity {

    //Count Button
    TextView txtCount;
    ImageView image;
    Button btnCount;
    Button wmute;
    Button wreset;
    public static int count = 0;
    SharedPreferences app_preferences;
    MediaPlayer mpButtonClick;
    AudioManager audioManager;
    public static boolean mutestatus = false;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // The activity is being created.
        setContentView(R.layout.wazeefa);


        audioManager =
                (AudioManager) getSystemService(Context.AUDIO_SERVICE);
        //SAVE COUNT
        app_preferences = this.getSharedPreferences("myPrefscount", MODE_WORLD_READABLE);


        count = app_preferences.getInt("count", 0);

        txtCount = (TextView) findViewById(R.id.wcount);
        txtCount.setText("This app has been started " + count + " times.");

        image = (ImageView) findViewById(R.id.imageview);

        txtCount = (TextView) findViewById(R.id.wcount);
        txtCount.setText("This app has been started " + count + " times.");

        //Button SOUND AND COUNT
        mpButtonClick = MediaPlayer.create(this, R.raw.bubble);
        //RESET Button
        wreset = (Button) findViewById(R.id.wreset);

        txtCount = (TextView) findViewById(R.id.wcount);
        txtCount.setText(String.valueOf(count));

        btnCount = (Button) findViewById(R.id.wclick);

        wmute = (Button) findViewById(R.id.wmute);

        btnCount.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {

                count++;
                if (count > 50) count = 0;
                image.setImageResource(R.drawable.duroodimage);
                if (count > 0) image.setImageResource(R.drawable.duroodimage);
                if (count > 9) image.setImageResource(R.drawable.zikrimage);
                if (count > 39) image.setImageResource(R.drawable.duroodimage);
                txtCount.setText(String.valueOf(count));
                mpButtonClick.start();
            }
        });

        wreset.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                count = 0;
                image.setImageResource(R.drawable.duroodimage);
                ;
                txtCount.setText("0");
                SharedPreferences.Editor editor = app_preferences.edit();
                editor.putInt("count", count);
                editor.commit();
            }
        });


        wmute.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                if (!mutestatus) {
                    mutestatus = true;
                    audioManager.setMode(AudioManager.MODE_IN_CALL);
                    audioManager.setStreamSolo(AudioManager.STREAM_VOICE_CALL, true);
                    Log.v("'test....", "" + mutestatus);
                } else {
                    mutestatus = false;
                    audioManager.setMode(AudioManager.MODE_NORMAL);
                    audioManager.setStreamSolo(AudioManager.STREAM_VOICE_CALL, false);
                    Log.v("'test....", "" + mutestatus);
                }
            }
        });
    }

    @Override
    protected void onPause() {
        super.onPause();
        // save count value here

        SharedPreferences.Editor editor = app_preferences.edit();
        editor.putInt("count", count);
        editor.commit();

    }
}
4

1 に答える 1

1

アプリケーション レベルで設定を保存し、それをアクティビティ固有にします。つまり、アプリケーションではなくアクティビティのミュート機能を実装します。

編集

あなたの目的は、オーディオをミュートおよびミュート解除 (loquent) することです。設定は 3 つの方法で保存できます。

1) 設定は、単一のアクティビティによってのみ取得できます。 2 ) プリファレンスは、アプリケーション内のすべてのアクティビティ間で共有および取得できます。3) 設定は、デバイス上のすべてのアプリケーションで共有および取得できます。

あなたの場合、アクティビティレベルの設定を保存します:

SharedPreferences prefs=getPreferences(Context.MODE_PRIVATE);
        SharedPreferences.Editor editor=prefs.edit();
        editor.putString("pref 1", "some text");

        editor.commit();

パラメータとして整数値を取る getPreferences(int mode) メソッドを呼び出して SharedPreferences オブジェクトを取得します。モード値は次のいずれかになります。

Context.MODE_PRIVATE (0): 作成されたファイルに、同じユーザー ID を持つアプリケーションのみがアクセスできるようにするファイル作成モード (同じアプリケーション コンテキストからファイルにアクセスします。後で説明します)。Context.MODE_WORLD_READABLE (1): ファイル モードにより、ファイルは他のアプリケーションから読み取り可能になります。Context.MODE_WORLD_WRITEABLE (2): ファイル モードでは、他のアプリケーションがファイルに書き込むことができます。次に、SharedPreferences.Editor のインスタンスを取得し、editor.putString(String key, String value) メソッドで設定値を書き込みます。共有設定では、次の方法を使用して設定を挿入できます。

editor.putBoolean(String key, boolean value).
editor.putFloat(String key,float value).
editor.putInt(String key, int value).
editor.putLong(String key, long value)
editor.putString(String key, String value)

次に、edit.commit() を呼び出して設定をファイルに保存します。commit は、保存の結果を示すブール値を返します。成功した場合は true 、失敗した場合は false です。

プリファレンス値の読み取り: プリファレンス値を読み取るには:

SharedPreferences prefs=getPreferences(Context.MODE_PRIVATE);
String val=prefs.getString("pref 1", "some text");
We use sharedpreferences.getString(String key, String defaultValue) (or get boolean/float/int) to return the value stored with a specific key or defaultValue if not found.

ソース

于 2012-12-25T14:24:44.300 に答える