学习Android之SharedPreferences使用

学习Android之SharedPreferences使用

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

效果图例如以下:

学习Android之SharedPreferences使用

当我们想让自己的属性设置保存下来,这时就须要SharedPreferences。

上面这个小程序,音乐状态是保存下来的。使用的上一次退出的状态。

进入DDMS,data文件下的data文件里,找到自己的包名文件,双击打开,有shared_prefs文件,里面有xml文件,这就是配置文件。

本程序使用了android的上下键,同常我们的模拟器的方向键是不能用的,这是就须要我们打开它,在C盘下找到文件 .android,双击avd文件,找到你的模拟器的目录,双击打开,找到config.ini,打开,改动armhw.dPad=yes,启动模拟器,这时就能用了。

本程序建立了MainActivity.java、MIDIPlayer.java、activity_main.xml。

程序代码例如以下:

MainActivity.java

package com.example.l3_sharedpreferences;

import com.example.l3_sharedpreferences.model.MIDIPlayer;
import android.os.Bundle;
import android.app.Activity;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.view.KeyEvent;
import android.view.Menu;
import android.widget.TextView;

public class MainActivity extends Activity {
	private TextView musicStateShow;
	private MIDIPlayer midiPlayer;
	private boolean musicSate=false;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		musicStateShow=(TextView) this.findViewById(R.id.musicStateShow);
		midiPlayer=new MIDIPlayer(this);
		
		SharedPreferences sharedPreferences=getSharedPreferences("music",MODE_PRIVATE);
		musicSate=sharedPreferences.getBoolean("mState", false);
		if(musicSate){
			musicStateShow.setText("当前音乐状态:开");
			midiPlayer.playMusic();		
		}else{
			musicStateShow.setText("当前音乐状态:关");
		}
		
		
	}
	
	
	
	/**
	 * 按键弹起事件
	 */
	@Override
	public boolean onKeyUp(int keyCode, KeyEvent event) {
		System.out.println("keyCode="+keyCode);
		switch (keyCode) {
		case KeyEvent.KEYCODE_DPAD_UP:
			musicStateShow.setText("当前音乐状态:开");
			musicSate=true;
			midiPlayer.playMusic();
			break;
		case KeyEvent.KEYCODE_DPAD_DOWN:
			musicStateShow.setText("当前音乐状态:关");
			musicSate=false;
			midiPlayer.freeMusic();
			break;
		default:
			break;
		}
		return super.onKeyUp(keyCode, event);
	}
	
	/**
	 * 按键按下事件
	 */
	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		//退出应用程序时保存数据
		if(keyCode==KeyEvent.KEYCODE_BACK){
			SharedPreferences sharedPreferences=getSharedPreferences("music", MODE_PRIVATE);
			Editor editor=sharedPreferences.edit();  //取得编辑对象
			editor.putBoolean("mState", musicSate);   //加入�数据
			editor.commit();     //保存
			if(musicSate){
				midiPlayer.freeMusic();
			}
			finish();
		}
		return super.onKeyDown(keyCode, event);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}

MIDIPlayer.java

package com.example.l3_sharedpreferences.model;

import java.io.IOException;
import com.example.l3_sharedpreferences.R;
import android.content.Context;
import android.media.MediaPlayer;

public class MIDIPlayer {
	public MediaPlayer playerMusic = null;
	private Context mContext = null;

	public MIDIPlayer(Context context) {
		mContext = context;
	}

	/* 播放音乐 */
	public void playMusic() {
		/* 装载资源中的音乐 */
		playerMusic = MediaPlayer.create(mContext, R.raw.start);

		/* 设置是否循环 */
		playerMusic.setLooping(true);
		try {
			playerMusic.prepare();
		} catch (IllegalStateException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		playerMusic.start();
	}

	/* 停止并释放音乐 */
	public void freeMusic() {
		if (playerMusic != null) {
			playerMusic.stop();
			playerMusic.release();
		}
	}
}

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <TextView
        android:id="@+id/musicStateShow"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/currentMusic"/>

</RelativeLayout>

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/118732.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 零散学习笔记(一)—-单相逆变电路设计

    零散学习笔记(一)—-单相逆变电路设计这几天帮别人设计然后画一个电路图,只设计电路图,没有具体实现功能。这题是一道电赛题,大家都知道设计一个电路简单,但是要具体实现功能可不是那么简单的。而本文章是最简单的一部分—电路部分,不涉及程序部分和调试。AC-DC电路设计电源输入电压为220V交流电压,在一般设计中只要是输入为220V交流电肯定需要将交流电转换成直流电压。一般有两个方法:模电方法:使用转换电路——整流(几个二极管组合起来把正负电压变成单向)–滤波(使波形平滑)–稳压(固定输出)–直流电压数电方法:使用DC-AC芯片进行转换(博

    2022年6月9日
    40
  • java自定义注解枚举_java_自定义注解「建议收藏」

    1注解的定义和用途1.1官方描述Anannotationisaformofmetadata,thatcanbeaddedtoJavasourcecode.Classes,methods,variables,parametersandpackagesmaybeannotated.Annotationshavenodirecteffecton…

    2022年4月13日
    46
  • oracle dba书籍推荐_推荐给大学生必读的书

    oracle dba书籍推荐_推荐给大学生必读的书推荐给DBA的Oracle书籍

    2022年9月26日
    2
  • 基于阿里DDNS的ipv6 for windows版软件

    基于阿里DDNS的ipv6 for windows版软件基于阿里DDNS的ipv6forwindows版软件会搜到这篇帖子的同学,应该和我一样,满世界为自己的虚拟主机找寻ipv6的动态ddns程序吧?下面我先说说我的折腾故事:因为买了群晖,然后发现需要公网ip,但公网ip现在电信要钱了,开口100元一个月,挺黑的。没办法尝试了各种内网穿透,这类帖子网上很多,就不细说了,总之是各种折腾,各种不爽,最终选择了零遁伴侣做内网穿透还算稳定,速度也不错。…

    2022年6月13日
    157
  • VMware16NAT模式配置固定IP[通俗易懂]

    VMware16NAT模式配置固定IP[通俗易懂]文章目录前言一、NAT配置固定IP二、重启网卡结尾前言为什么要配置固定IP呀?这个很容易解释啊,因为配置集群要设置固定IP(主结点需要管理子结点,通过固定IP识别机器),因为你访问虚拟机方便(不固定IP访问前还需要先查下虚拟机当前分配IP,比较麻烦)等等。配置固定IP采用哪种网络配置方式呢,NAT,桥接?仅主机反正是不行的,不能联网啊。NAT也叫网络地址转换,通常它的名称为VMnet8,通过nat的连接方式可以使得虚拟机和真实机的网卡在不同的网段中,从而实现联网。而bridge也叫桥接,通常它的名称

    2022年6月29日
    69
  • 阿里技术专家详解 Dubbo 实践,演进及未来规划

    阿里技术专家详解 Dubbo 实践,演进及未来规划

    2021年6月28日
    98

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号