Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 697|回复: 0

玩转Android--UI篇--PreferenceActivity-  Android学习

[复制链接]

该用户从未签到

发表于 2011-10-24 14:51:49 | 显示全部楼层 |阅读模式
本测试主要是为了测试PreferenceActivity的使用,其中设置了播放背景音乐和开启wifi的设置,也就是本文要讲的
PreferenceActivity。
Android提供了放摆放的工具来定义所有的程序的首选项,并支持既不不许要编写代码的情况写显示这些首选项。可以在一个名为res/xml/settings.xml的资源文件中定义这些首选项:
res/xml/settings.xml

java代码
<?xml version="1.0" encoding="utf-8"?>

&ltreferenceScreen

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

        protected void onPause() {

                // TODO Auto-generated method stub

                super.onPause();

                Music.stop(this);

                Log.d("System.out", "onPause----------------");

        }
复制代码

Wifi:
首先需要在清单文件中加入权限:
Xml代码
<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中
Java代码
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代码
@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代码
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);

        }

   

   

}
复制代码


运行结果如下:




回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2025-1-11 12:01 , Processed in 0.325618 second(s), 36 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表