`

玩转Android--UI篇--PreferenceActivity(开启wifi和音乐等)

 
阅读更多

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

PreferenceActivity。

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

res/xml/settings.xml

 

<?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 version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello World, NewGameActivity!</string>
    <string name="btntext">开始游戏</string>
    <string name="app_name">NewGame</string>
    <string name="game_level">游戏级别</string>
    <string name="easy_level">菜鸟级</string>
    <string name="general_level">普通级</string>
    <string name="medium_level">高手级</string>
    <string name="hard_level">骨灰级</string>
    <string name="wifiinfo">启动wifi</string>
     <string name="music">音乐</string>
    <string name="music_summaryOn">开启背景音乐</string>
     <string name="music_summaryOff">关闭背景音乐</string>
    <string name="wifi">无线</string>
    <string name="wifi_summaryOn">开启无线网络</string>
    <string name="wifi_summaryOff">关闭无线网络</string>
</resources>

Settings.java

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 用于设置背景音乐

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,我们可以将设置背景音乐和蓝牙的设置放在此处,代码如下:

	@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时停止掉,只有到进入主界面玩游戏的时候再开启,这样要合理些。代码如下:

	@Override
	protected void onPause() {
		// TODO Auto-generated method stub
		super.onPause();
		Music.stop(this);
		Log.d("System.out", "onPause----------------");
	}

 

Wifi:

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

 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
    <uses-permission android:name="android.permission.WAKE_LOCK"/>

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

	public void wifion()
	{
		if(!wifiManager.isWifiEnabled())
			wifiManager.setWifiEnabled(true);
	}
	public void wifioff()
	{
		if(wifiManager.isWifiEnabled())
			wifiManager.setWifiEnabled(false);
	}

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

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

	@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

 
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);
	}
    
    
}

 

运行结果如下:



 

 

 

源代码见附件:

 

  • 大小: 18.7 KB
  • 大小: 20.4 KB
  • 大小: 21.3 KB
  • 大小: 16.9 KB
分享到:
评论

相关推荐

    PreferenceActivity用法简介Android X

    PreferenceActivity用法简介 Android X

    Android之PreferenceActivity简介

    - `android:defaultValue` 用于设置初始状态,这里“apply_wifi”默认为开启状态。 #### 六、触发事件 在PreferenceActivity中,当用户更改了设置后,通常需要刷新应用的状态或者更新UI。这可以通过监听Preference...

    Android 属性页PreferenceActivity的实现

    Google推荐使用`PreferenceFragmentCompat`或`PreferenceFragment`来代替,它们可以在任何版本的Android上运行,并提供了更好的兼容性和更现代的UI设计。例如,使用`PreferenceFragmentCompat`的方式如下: ```java...

    Android软件开发之PreferenceActivity中组件的使用

    在Android应用开发中,PreferenceActivity是用于创建设置界面的一个特殊Activity。它允许开发者以XML方式定义用户界面元素,如开关、选择列表等,使得创建设置界面变得更加简洁和规范。本教程将深入探讨如何在...

    android PreferenceActivity中的组件源码

    android PreferenceActivity中的组件源码~

    PreferenceActivity UI 优化修改

    这篇博文可能是关于如何优化PreferenceActivity的UI,以提高用户体验和性能。以下是对这个主题的详细解释: 1. **PreferenceActivity的结构**: - PreferenceActivity基于列表视图(ListView)实现,它将每个偏好...

    Android PreferenceActivity

    在Android开发中,`PreferenceActivity`是用于创建设置界面的一个重要组件。它是Android SDK提供的一种特殊类型的Activity,专门用于展示用户可配置的设置项。在深入理解`PreferenceActivity`之前,我们先要明白`...

    Android PreferenceActivity 学习笔记

    在Android开发中,PreferenceActivity是用于创建设置界面的一个类,它是Activity的一个子类,专门用于显示和处理用户在设置界面中的交互。这篇学习笔记将深入探讨PreferenceActivity的使用方法、功能以及与源码相关...

    PreferenceActivity简介

    这篇博客将深入探讨PreferenceActivity的使用方法和相关知识点。 首先,PreferenceActivity是Android SDK提供的一个基类,它继承自Activity并添加了对Preference(偏好)的支持。通过使用PreferenceActivity,...

    Android PreferenceActivity 使用练习

    它允许开发者通过XML定义UI元素,如开关、单选按钮、复选框等,并在活动中动态加载这些元素,简化了构建用户设置界面的过程。本篇文章将深入探讨PreferenceActivity的使用方法以及相关知识点。 首先,我们了解`...

    Android之PreferenceActivity.doc

    PreferenceActivity在Android开发中主要用于构建设置界面,类似于iOS中的偏好设置。它是一个特殊的Activity,用于展示和管理用户配置项,通常包含各种可交互的控件,如开关按钮、列表选择和输入框等,用于保存用户的...

    android中PreferenceActivity详解

    标题与描述均提及了《Android中PreferenceActivity详解》,这一主题涉及了Android开发中关于用户偏好设置的核心组件——PreferenceActivity的深入解析。以下是基于标题、描述、标签以及部分内容的关键知识点总结,...

    android-Data-storage-and-access.rar_InternalFileDemo_android_and

    4. **SimplePreferenceDemo**:此示例可能与SharePreferenceDemo相似,但可能更侧重于展示如何在UI中使用PreferenceFragment或PreferenceActivity来创建用户设置界面,使用户可以直接在应用内修改设置。 5. **...

    Android背景音乐设置代码

    本教程将深入探讨如何在Android中实现这一功能,重点聚焦于`PreferenceActivity`的使用以及如何选择SD卡上的音乐文件作为背景音乐。 首先,我们需要理解`PreferenceActivity`。`PreferenceActivity`是Android提供的...

    自定义PreferenceActivity的样式和界面

    在Android开发中,PreferenceActivity是用于创建设置界面的标准组件,它允许开发者以XML方式定义用户界面,然后在活动中展示这些设置项。然而,系统默认的PreferenceActivity样式可能无法满足所有设计需求,这时我们...

    自定义PreferenceActivity

    在Android开发中,`PreferenceActivity`是用于创建设置界面的标准组件。它允许开发者通过XML文件定义各种偏好选项,如开关、单选按钮、多选按钮等,并将它们以活动的形式展示给用户。然而,标准的`...

    仿IOS的PreferenceActivity界面

    "仿IOS的PreferenceActivity界面"就是一个这样的实践,它主要涉及到Android的Preference类和Activity的使用,以及UI样式的美化。PreferenceActivity是Android系统提供的一种用于展示设置界面的特殊Activity,它能够...

    Android至PreferenceActivity

    ### Android之PreferenceActivity详解 #### 一、Introduction 在Android开发过程中,经常需要为应用提供一个用户可配置的界面,以便于用户能够调整各种设置。PreferenceActivity正是Android平台提供的一个非常实用...

    preferenceActivity的简单使用

    在Android开发中,`PreferenceActivity`是用于创建设置界面的一种特殊类型的Activity,它允许开发者以声明式的方式构建用户界面,通常用于应用的设置菜单。在本教程中,我们将深入探讨`PreferenceActivity`的使用,...

Global site tag (gtag.js) - Google Analytics