2

我正在创建一个简单的点击计数器android应用程序,单击按钮时会播放声音,并且在离开计数屏幕然后返回时也会保存计数。

我遇到了静音按钮的问题。当我单击它时,它会使整个应用程序静音,而不仅仅是那个特定的 gui 屏幕(活动)。

  1. 第一个问题是静音按钮使整个应用程序静音,我只需要为该活动静音。

  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)音频,首选项可以通过三种方式保存。

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 回答