PreferenceActivity用法简介(二)

 

本测试主要是为了测试PreferenceActivity的使用,其中设置了播放背景音乐和开启wifi的设置,也就是本文要讲的

PreferenceActivity。

Android提供了放摆放的工具来定义所有的程序的首选项,并支持既不不许要编写代码的情况写显示这些首选项。可以在一个名为res/xml/settings.xml的资源文件中定义这些首选项:

res/xml/settings.xml

 

Java代码 复制代码  收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>   
  2. <PreferenceScreen   
  3.   xmlns:android="http://schemas.android.com/apk/res/android">   
  4.     <CheckBoxPreference   
  5.         android:key="music"  
  6.         android:title="@string/music"  
  7.         android:summaryOn="@string/music_summaryOn"  
  8.         android:summaryOff="@string/music_summaryOff"  
  9.         android:defaultValue="true"    
  10.     />   
  11.     <CheckBoxPreference   
  12.         android:key="wifi"  
  13.         android:title="@string/wifi"  
  14.         android:summaryOn="@string/wifi_summaryOn"  
  15.         android:summaryOff="@string/wifi_summaryOff"  
  16.         android:defaultValue="true"    
  17.     />   
  18. </PreferenceScreen>  
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
  xmlns:android="http://schemas.android.com/apk/res/android">
    <CheckBoxPreference
    	android:key="music"
    	android:title="@string/music"
    	android:summaryOn="@string/music_summaryOn"
    	android:summaryOff="@string/music_summaryOff"
    	android:defaultValue="true" 
    />
    <CheckBoxPreference
    	android:key="wifi"
    	android:title="@string/wifi"
    	android:summaryOn="@string/wifi_summaryOn"
    	android:summaryOff="@string/wifi_summaryOff"
    	android:defaultValue="true" 
    />
</PreferenceScreen>

 res/values/strings.xml

Xml代码 复制代码  收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <resources>  
  3.     <string name="hello">Hello World, NewGameActivity!</string>  
  4.     <string name="btntext">开始游戏</string>  
  5.     <string name="app_name">NewGame</string>  
  6.     <string name="game_level">游戏级别</string>  
  7.     <string name="easy_level">菜鸟级</string>  
  8.     <string name="general_level">普通级</string>  
  9.     <string name="medium_level">高手级</string>  
  10.     <string name="hard_level">骨灰级</string>  
  11.     <string name="wifiinfo">启动wifi</string>  
  12.      <string name="music">音乐</string>  
  13.     <string name="music_summaryOn">开启背景音乐</string>  
  14.      <string name="music_summaryOff">关闭背景音乐</string>  
  15.     <string name="wifi">无线</string>  
  16.     <string name="wifi_summaryOn">开启无线网络</string>  
  17.     <string name="wifi_summaryOff">关闭无线网络</string>  
  18. </resources>  

Settings.java

Java代码 复制代码  收藏代码
  1. package com.hualang.gotogame;   
  2.   
  3. import android.content.Context;   
  4. import android.os.Bundle;   
  5. import android.preference.PreferenceActivity;   
  6. import android.preference.PreferenceManager;   
  7.   
  8. public class Settings extends PreferenceActivity {   
  9.     private static final String MUSIC = "music";   
  10.     private static final boolean MUSIC_DEF = true;   
  11.     private static final String WIFI = "wifi";   
  12.     private static final boolean WIFI_DEF = true;   
  13.     @Override  
  14.     public void onCreate(Bundle savedInstanceState) {   
  15.         super.onCreate(savedInstanceState);   
  16.         addPreferencesFromResource(R.xml.settings);   
  17.     }   
  18.     //获得当前音乐的值   
  19.     public static boolean getMusic(Context context)   
  20.     {   
  21.         return PreferenceManager.getDefaultSharedPreferences(context).getBoolean(MUSIC, MUSIC_DEF);   
  22.     }   
  23.     //获取当前蓝牙选项的值   
  24.     public static boolean getWifi(Context context)   
  25.     {   
  26.         return PreferenceManager.getDefaultSharedPreferences(context).getBoolean(WIFI, WIFI_DEF);   
  27.     }   
  28.        
  29.        
  30. }  
package com.hualang.gotogame;

import android.content.Context;
import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.preference.PreferenceManager;

public class Settings extends PreferenceActivity {
    private static final String MUSIC = "music";
    private static final boolean MUSIC_DEF = true;
    private static final String WIFI = "wifi";
    private static final boolean WIFI_DEF = true;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.settings);
    }
    //获得当前音乐的值
    public static boolean getMusic(Context context)
    {
    	return PreferenceManager.getDefaultSharedPreferences(context).getBoolean(MUSIC, MUSIC_DEF);
    }
    //获取当前蓝牙选项的值
    public static boolean getWifi(Context context)
    {
    	return PreferenceManager.getDefaultSharedPreferences(context).getBoolean(WIFI, WIFI_DEF);
    }
    
    
}

 addPreferencesFromResource()方法从XML中读取设置定义,并将其解压缩到当前的活动试图中,所有耗时的解压缩工作都是在PreferenceActivity类中处理的

保存的Preference文件存放在data/data/项目包名/shared_prefs下,名字为“包名_preferences.xml”

这里的就是:

com.hualang.gotogame_preferences.xml
Music.java 用于设置背景音乐

Java代码 复制代码  收藏代码
  1. package com.hualang.gotogame;   
  2.   
  3. import android.content.Context;   
  4. import android.media.MediaPlayer;   
  5.   
  6. public class Music {   
  7.     private static MediaPlayer mp = null;   
  8.     //停止旧歌曲,开始新歌曲   
  9.     public static void play(Context context, int resource)   
  10.     {   
  11.         stop(context);   
  12.         if(Settings.getMusic(context))   
  13.         {   
  14.             mp = MediaPlayer.create(context, resource);   
  15.             mp.setLooping(true);   
  16.             mp.start();   
  17.         }   
  18.     }   
  19.     //停止音乐   
  20.     public static void stop(Context context)   
  21.     {   
  22.         if(mp!=null)   
  23.         {   
  24.             mp.stop();   
  25.             mp.release();   
  26.             mp = null;   
  27.         }   
  28.     }   
  29. }  
package com.hualang.gotogame;

import android.content.Context;
import android.media.MediaPlayer;

public class Music {
	private static MediaPlayer mp = null;
	//停止旧歌曲,开始新歌曲
	public static void play(Context context, int resource)
	{
		stop(context);
		if(Settings.getMusic(context))
		{
			mp = MediaPlayer.create(context, resource);
			mp.setLooping(true);
			mp.start();
		}
	}
	//停止音乐
	public static void stop(Context context)
	{
		if(mp!=null)
		{
			mp.stop();
			mp.release();
			mp = null;
		}
	}
}

 下面就是核心代码了,这里主要说一下如何调用背景音乐和蓝牙

背景音乐:

首先,开发者必须了解Android的生命周期,当我们运行的时候,会经历onCreate---onStart---onResume,我们可以将设置背景音乐和蓝牙的设置放在此处,代码如下:

Java代码 复制代码  收藏代码
  1. @Override  
  2. protected void onResume() {   
  3.     // TODO Auto-generated method stub   
  4.     super.onResume();   
  5.     Music.play(this, R.raw.test);   
  6.     if(Settings.getWifi(this))   
  7.     {   
  8.         wifion();   
  9.     }else  
  10.     {   
  11.         wifioff();   
  12.     }   
  13.     Log.d("System.out""onResume-----------");   
  14. }  
	@Override
	protected void onResume() {
		// TODO Auto-generated method stub
		super.onResume();
		Music.play(this, R.raw.test);
		if(Settings.getWifi(this))
		{
			wifion();
		}else
		{
			wifioff();
		}
		Log.d("System.out", "onResume-----------");
	}

 这样,如果保存的CheckBoxPreferences为true,就设置背景音乐,启动wifi,否则就关闭北京音乐,关闭wifi

当我们进入设置界面的时候,进入了onPause,设置完后返回主界面,又变成了onResume,所以背景音乐部分在进入

onPause时停止掉,只有到进入主界面玩游戏的时候再开启,这样要合理些。代码如下:

Java代码 复制代码  收藏代码
  1. @Override  
  2. protected void onPause() {   
  3.     // TODO Auto-generated method stub   
  4.     super.onPause();   
  5.     Music.stop(this);   
  6.     Log.d("System.out""onPause----------------");   
  7. }  
	@Override
	protected void onPause() {
		// TODO Auto-generated method stub
		super.onPause();
		Music.stop(this);
		Log.d("System.out", "onPause----------------");
	}

 

Wifi:

首先需要在清单文件中加入权限:

Xml代码 复制代码  收藏代码
  1. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>  
  2.    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>  
  3.    <uses-permission android:name="android.permission.WAKE_LOCK"/>  

 我们也将wifi的操作放在onResume中

Java代码 复制代码  收藏代码
  1. public void wifion()   
  2. {   
  3.     if(!wifiManager.isWifiEnabled())   
  4.         wifiManager.setWifiEnabled(true);   
  5. }   
  6. public void wifioff()   
  7. {   
  8.     if(wifiManager.isWifiEnabled())   
  9.         wifiManager.setWifiEnabled(false);   
  10. }  
	public void wifion()
	{
		if(!wifiManager.isWifiEnabled())
			wifiManager.setWifiEnabled(true);
	}
	public void wifioff()
	{
		if(wifiManager.isWifiEnabled())
			wifiManager.setWifiEnabled(false);
	}

 上面两个方法用户打开和关闭wifi。

下面的代码通过判断Setting.getWifi(this)的布尔值,如果真,也就是被选中的话,则打卡wifi,否则关闭wifi

Java代码 复制代码  收藏代码
  1. @Override  
  2. protected void onResume() {   
  3.     // TODO Auto-generated method stub   
  4.     super.onResume();   
  5.     Music.play(this, R.raw.test);   
  6.     if(Settings.getWifi(this))   
  7.     {   
  8.         wifion();   
  9.     }else  
  10.     {   
  11.         wifioff();   
  12.     }   
  13.     Log.d("System.out""onResume-----------");   
  14. }  
	@Override
	protected void onResume() {
		// TODO Auto-generated method stub
		super.onResume();
		Music.play(this, R.raw.test);
		if(Settings.getWifi(this))
		{
			wifion();
		}else
		{
			wifioff();
		}
		Log.d("System.out", "onResume-----------");
	}
 

 NewGameActivity

 
Java代码 复制代码  收藏代码
  1. package com.hualang.gotogame;   
  2.   
  3. import android.app.Activity;   
  4. import android.app.AlertDialog;   
  5. import android.content.Context;   
  6. import android.content.DialogInterface;   
  7. import android.content.Intent;   
  8. import android.content.SharedPreferences;   
  9. import android.net.wifi.WifiManager;   
  10. import android.os.Bundle;   
  11. import android.util.Log;   
  12. import android.view.Menu;   
  13. import android.view.MenuItem;   
  14. import android.view.View;   
  15. import android.view.View.OnClickListener;   
  16. import android.widget.Button;   
  17.   
  18. public class NewGameActivity extends Activity {   
  19.     private Button clickme;   
  20.     WifiManager wifiManager;   
  21.     @Override  
  22.     public void onCreate(Bundle savedInstanceState) {   
  23.         super.onCreate(savedInstanceState);   
  24.         setContentView(R.layout.main);   
  25.         wifiManager = (WifiManager)this.getSystemService(Context.WIFI_SERVICE);   
  26.         clickme = (Button)findViewById(R.id.clickme);   
  27.         clickme.setOnClickListener(new OnClickListener()   
  28.         {   
  29.   
  30.             @Override  
  31.             public void onClick(View v) {   
  32.                 startNewGameDialog();   
  33.             }   
  34.                
  35.         });   
  36.           
  37.     }   
  38.        
  39.     private void startNewGameDialog()   
  40.     {   
  41.         new AlertDialog.Builder(this)   
  42.         .setTitle(R.string.game_level)   
  43.         .setItems(R.array.difficulty,    
  44.                 new DialogInterface.OnClickListener() {   
  45.                        
  46.                     @Override  
  47.                     public void onClick(DialogInterface dialog, int which) {   
  48.                         startGame(which);   
  49.                     }   
  50.                 }).show();   
  51.     }   
  52.        
  53.     private void startGame(int i)   
  54.     {   
  55.         //开始游戏   
  56.     }   
  57.   
  58.     @Override  
  59.     public boolean onCreateOptionsMenu(Menu menu) {   
  60.         menu.add(0,0,0,"设置");   
  61.         menu.add(0,1,1,"关于");   
  62.         menu.add(0,2,2,"退出");   
  63.         return super.onCreateOptionsMenu(menu);   
  64.            
  65.     }   
  66.   
  67.     @Override  
  68.     public boolean onOptionsItemSelected(MenuItem item) {   
  69.         switch(item.getItemId())   
  70.         {   
  71.         case 0:   
  72.         {   
  73.             Intent intent = new Intent();   
  74.             intent.setClass(NewGameActivity.this, Settings.class);   
  75.             startActivity(intent);   
  76.         }   
  77.         break;   
  78.         case 1:   
  79.             break;   
  80.         case 2:   
  81.             finish();   
  82.             break;   
  83.         }   
  84.         return super.onOptionsItemSelected(item);   
  85.     }   
  86.        
  87.     @Override  
  88.     protected void onResume() {   
  89.         // TODO Auto-generated method stub  
  90.         super.onResume();   
  91.         Music.play(this, R.raw.test);   
  92.         if(Settings.getWifi(this))   
  93.         {   
  94.             wifion();   
  95.         }else  
  96.         {   
  97.             wifioff();   
  98.         }   
  99.         Log.d("System.out""onResume-----------");   
  100.     }   
  101.   
  102.     @Override  
  103.     protected void onPause() {   
  104.         // TODO Auto-generated method stub  
  105.         super.onPause();   
  106.         Music.stop(this);   
  107.         Log.d("System.out""onPause----------------");   
  108.     }   
  109.        
  110.     public void wifion()   
  111.     {   
  112.         if(!wifiManager.isWifiEnabled())   
  113.             wifiManager.setWifiEnabled(true);   
  114.     }   
  115.     public void wifioff()   
  116.     {   
  117.         if(wifiManager.isWifiEnabled())   
  118.             wifiManager.setWifiEnabled(false);   
  119.     }   
  120.        
  121.        
  122. }  
package com.hualang.gotogame;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class NewGameActivity extends Activity {
    private Button clickme;
    WifiManager wifiManager;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        wifiManager = (WifiManager)this.getSystemService(Context.WIFI_SERVICE);
        clickme = (Button)findViewById(R.id.clickme);
        clickme.setOnClickListener(new OnClickListener()
        {

			@Override
			public void onClick(View v) {
				startNewGameDialog();
			}
        	
        });
       
    }
    
    private void startNewGameDialog()
    {
    	new AlertDialog.Builder(this)
    	.setTitle(R.string.game_level)
    	.setItems(R.array.difficulty, 
    			new DialogInterface.OnClickListener() {
					
					@Override
					public void onClick(DialogInterface dialog, int which) {
						startGame(which);
					}
				}).show();
    }
    
    private void startGame(int i)
    {
    	//开始游戏
    }

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		menu.add(0,0,0,"设置");
		menu.add(0,1,1,"关于");
		menu.add(0,2,2,"退出");
		return super.onCreateOptionsMenu(menu);
		
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		switch(item.getItemId())
		{
		case 0:
		{
			Intent intent = new Intent();
			intent.setClass(NewGameActivity.this, Settings.class);
			startActivity(intent);
		}
		break;
		case 1:
			break;
		case 2:
			finish();
			break;
		}
		return super.onOptionsItemSelected(item);
	}
	
	@Override
	protected void onResume() {
		// TODO Auto-generated method stub
		super.onResume();
		Music.play(this, R.raw.test);
		if(Settings.getWifi(this))
		{
			wifion();
		}else
		{
			wifioff();
		}
		Log.d("System.out", "onResume-----------");
	}

	@Override
	protected void onPause() {
		// TODO Auto-generated method stub
		super.onPause();
		Music.stop(this);
		Log.d("System.out", "onPause----------------");
	}
	
	public void wifion()
	{
		if(!wifiManager.isWifiEnabled())
			wifiManager.setWifiEnabled(true);
	}
	public void wifioff()
	{
		if(wifiManager.isWifiEnabled())
			wifiManager.setWifiEnabled(false);
	}
    
    
}

 

运行结果如下:



 

 

 

源代码见附件:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值