0%

很多Android应用程序都有设置选项,为了下次启动时不用重新设置,我们必须保存设置。保存设置可以通过读写文件,或者是保存在数据库中,但这样的话,操作会复杂很多。其实Android还有另一种方法保存设置,就是设置SharedPreferences。 下面做下演示: 先是写入设置:

Editor sharedata = getSharedPreferences("simplePlayer", 0).edit();  
sharedata.putString("Dir",(String) tv1.getText());
sharedata.commit(); 

读取设置:

SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);   
String dir=settings.getString("Dir","");

之前有过两次,网上找的代码,别人都能正常运行,而在我这却打开就报错,检查了很久才发现是程序权限问题。Android程序在使用很多功能时都必须先在Manifest.xml文件中声明需要的权限,否则无法运行。以下是网上找的android权限列表 android.permission.ACCESS_CHECKIN_PROPERTIES 允许读写访问”properties”表在checkin数据库中,改值可以修改上传( Allows read/write access to the “properties” table in the checkin database, to change values that get uploaded) android.permission.ACCESS_COARSE_LOCATION 允许一个程序访问CellID或WiFi热点来获取粗略的位置(Allows an application to access coarse (e.g., Cell-ID, WiFi) location) android.permission.ACCESS_FINE_LOCATION 允许一个程序访问精良位置(如GPS) (Allows an application to access fine (e.g., GPS) location) android.permission.ACCESS_LOCATION_EXTRA_COMMANDS 允许应用程序访问额外的位置提供命令(Allows an application to access extra location provider commands) android.permission.ACCESS_MOCK_LOCATION 允许程序创建模拟位置提供用于测试(Allows an application to create mock location providers for testing) android.permission.ACCESS_NETWORK_STATE 允许程序访问有关GSM网络信息(Allows applications to access information about networks) android.permission.ACCESS_SURFACE_FLINGER 允许程序使用SurfaceFlinger底层特性(Allows an application to use SurfaceFlinger’s low level features) android.permission.ACCESS_WIFI_STATE 允许程序访问Wi-Fi网络状态信息(Allows applications to access information about Wi-Fi networks) android.permission.ADD_SYSTEM_SERVICE 允许程序发布系统级服务(Allows an application to publish system-level services). android.permission.BATTERY_STATS 允许程序更新手机电池统计信息(Allows an application to update the collected battery statistics) android.permission.BLUETOOTH 允许程序连接到已配对的蓝牙设备(Allows applications to connect to paired bluetooth devices) android.permission.BLUETOOTH_ADMIN 允许程序发现和配对蓝牙设备(Allows applications to discover and pair bluetooth devices) android.permission.BRICK 请求能够禁用设备(非常危险)(Required to be able to disable the device (very *erous!).) android.permission.BROADCAST_PACKAGE_REMOVED 允许程序广播一个提示消息在一个应用程序包已经移除后(Allows an application to broadcast a notification that an application package has been removed) android.permission.BROADCAST_STICKY 允许一个程序广播常用intents(Allows an application to broadcast sticky intents) android.permission.CALL_PHONE 允许一个程序初始化一个电话拨号不需通过拨号用户界面需要用户确认(Allows an application to initiate a phone call without going through the Dialer user interface for the user to confirm the call being placed.) android.permission.CALL_PRIVILEGED 允许一个程序拨打任何号码,包含紧急号码无需通过拨号用户界面需要用户确认(Allows an application to call any phone number, including emergency numbers, without going through the Dialer user interface for the user to confirm the call being placed) android.permission.CAMERA 请求访问使用照相设备(Required to be able to access the camera device. ) android.permission.CHANGE_COMPONENT_ENABLED_STATE 允许一个程序是否改变一个组件或其他的启用或禁用(Allows an application to change whether an application component (other than its own) is enabled or not. ) android.permission.CHANGE_CONFIGURATION 允许一个程序修改当前设置,如本地化(Allows an application to modify the current configuration, such as locale. ) android.permission.CHANGE_NETWORK_STATE 允许程序改变网络连接状态(Allows applications to change network connectivity state) android.permission.CHANGE_WIFI_STATE 允许程序改变Wi-Fi连接状态(Allows applications to change Wi-Fi connectivity state) android.permission.CLEAR_APP_CACHE 允许一个程序清楚缓存从所有安装的程序在设备中(Allows an application to clear the caches of all installed applications on the device. ) android.permission.CLEAR_APP_USER_DATA 允许一个程序清除用户设置(Allows an application to clear user data) android.permission.CONTROL_LOCATION_UPDATES 允许启用禁止位置更新提示从无线模块(Allows enabling/disabling location update notifications from the radio. ) android.permission.DELETE_CACHE_FILES 允许程序删除缓存文件(Allows an application to delete cache files) android.permission.DELETE_PACKAGES 允许一个程序删除包(Allows an application to delete packages) android.permission.DEVICE_POWER 允许访问底层电源管理(Allows low-level access to power management) android.permission.DIAGNOSTIC 允许程序RW诊断资源(Allows applications to RW to diagnostic resources. ) android.permission.DISABLE_KEYGUARD 允许程序禁用键盘锁(Allows applications to disable the keyguard ) android.permission.DUMP 允许程序返回状态抓取信息从系统服务(Allows an application to retrieve state dump information from system services.) android.permission.EXPAND_STATUS_BAR 允许一个程序扩展收缩在状态栏,android开发网提示应该是一个类似Windows Mobile中的托盘程序(Allows an application to expand or collapse the status bar. ) android.permission.FACTORY_TEST 作为一个工厂测试程序,运行在root用户(Run as a manufacturer test application, running as the root user. ) android.permission.FLASHLIGHT 访问闪光灯,android开发网提示HTC Dream不包含闪光灯(Allows access to the flashlight ) android.permission.FORCE_BACK 允许程序强行一个后退操作是否在顶层activities(Allows an application to force a BACK operation on whatever is the top activity. ) android.permission.FOTA_UPDATE 暂时不了解这是做什么使用的,android开发网分析可能是一个预留权限. android.permission.GET_ACCOUNTS 访问一个帐户列表在Accounts Service中(Allows access to the list of accounts in the Accounts Service) android.permission.GET_PACKAGE_SIZE 允许一个程序获取任何package占用空间容量(Allows an application to find out the space used by any package. ) android.permission.GET_TASKS 允许一个程序获取信息有关当前或最近运行的任务,一个缩略的任务状态,是否活动等等(Allows an application to get information about the currently or recently running tasks: a thumbnail representation of the tasks, what activities are running in it, etc.) android.permission.HARDWARE_TEST 允许访问硬件(Allows access to hardware peripherals. ) android.permission.INJECT_EVENTS 允许一个程序截获用户事件如按键、触摸、轨迹球等等到一个时间流,android 开发网提醒算是hook技术吧(Allows an application to inject user events (keys, touch, trackball) into the event stream and deliver them to ANY window.) android.permission.INSTALL_PACKAGES 允许一个程序安装packages(Allows an application to install packages. ) android.permission.INTERNAL_SYSTEM_WINDOW 允许打开窗口使用系统用户界面(Allows an application to open windows that are for use by parts of the system user interface. ) android.permission.INTERNET 允许程序打开网络套接字(Allows applications to open network sockets) android.permission.MANAGE_APP_TOKENS 允许程序管理(创建、催后、 z- order默认向z轴推移)程序引用在窗口管理器中(Allows an application to manage (create, destroy, Z-order) application tokens in the window manager. ) android.permission.MASTER_CLEAR目前还没有明确的解释,android开发网分析可能是清除一切数据,类似硬格机 android.permission.MODIFY_AUDIO_SETTINGS 允许程序修改全局音频设置(Allows an application to modify global audio settings) android.permission.MODIFY_PHONE_STATE 允许修改话机状态,如电源,人机接口等(Allows modification of the telephony state – power on, mmi, etc. ) android.permission.MOUNT_UNMOUNT_FILESYSTEMS 允许挂载和反挂载文件系统可移动存储(Allows mounting and unmounting file systems for removable storage. ) android.permission.PERSISTENT_ACTIVITY 允许一个程序设置他的activities显示(Allow an application to make its activities persistent. ) android.permission.PROCESS_OUTGOING_CALLS 允许程序监视、修改有关播出电话(Allows an application to monitor, modify, or abort outgoing calls) android.permission.READ_CALENDAR 允许程序读取用户日历数据(Allows an application to read the user’s calendar data.) android.permission.READ_CONTACTS 允许程序读取用户联系人数据(Allows an application to read the user’s contacts data.) android.permission.READ_FRAME_BUFFER 允许程序屏幕波或和更多常规的访问帧缓冲数据(Allows an application to take screen shots and more generally get access to the frame buffer data) android.permission.READ_INPUT_STATE 允许程序返回当前按键状态(Allows an application to retrieve the current state of keys and switches. ) android.permission.READ_LOGS 允许程序读取底层系统日志文件(Allows an application to read the low-level system log files. ) android.permission.READ_OWNER_DATA 允许程序读取所有者数据(Allows an application to read the owner’s data) android.permission.READ_SMS 允许程序读取短信息(Allows an application to read SMS messages.) android.permission.READ_SYNC_SETTINGS 允许程序读取同步设置(Allows applications to read the sync settings) android.permission.READ_SYNC_STATS 允许程序读取同步状态(Allows applications to read the sync stats) android.permission.REBOOT 请求能够重新启动设备(Required to be able to reboot the device. ) android.permission.RECEIVE_BOOT_COMPLETED 允许一个程序接收到 ACTION_BOOT_COMPLETED广播在系统完成启动(Allows an application to receive the ACTION_BOOT_COMPLETED that is broadcast after the system finishes booting. ) android.permission.RECEIVE_MMS 允许一个程序监控将收到MMS彩信,记录或处理(Allows an application to monitor incoming MMS messages, to record or perform processing on them. ) android.permission.RECEIVE_SMS 允许程序监控一个将收到短信息,记录或处理(Allows an application to monitor incoming SMS messages, to record or perform processing on them.) android.permission.RECEIVE_WAP_PUSH 允许程序监控将收到WAP PUSH信息(Allows an application to monitor incoming WAP push messages. ) android.permission.RECORD_AUDIO 允许程序录制音频(Allows an application to record audio) android.permission.REORDER_TASKS 允许程序改变Z轴排列任务(Allows an application to change the Z-order of tasks) android.permission.RESTART_PACKAGES 允许程序重新启动其他程序(Allows an application to restart other applications) android.permission.SEND_SMS 允许程序发送SMS短信(Allows an application to send SMS messages) android.permission.SET_ACTIVITY_WATCHER 允许程序监控或控制activities已经启动全局系统中Allows an application to watch and control how activities are started globally in the system. android.permission.SET_ALWAYS_FINISH 允许程序控制是否活动间接完成在处于后台时Allows an application to control whether activities are immediately finished when put in the background. android.permission.SET_ANIMATION_SCALE 修改全局信息比例(Modify the global animation scaling factor.) android.permission.SET_DEBUG_APP 配置一个程序用于调试(Configure an application for debugging.) android.permission.SET_ORIENTATION 允许底层访问设置屏幕方向和实际旋转(Allows low-level access to setting the orientation (actually rotation) of the screen.) android.permission.SET_PREFERRED_APPLICATIONS 允许一个程序修改列表参数PackageManager.addPackageToPreferred() 和PackageManager.removePackageFromPreferred()方法(Allows an application to modify the list of preferred applications with the PackageManager.addPackageToPreferred() and PackageManager.removePackageFromPreferred() methods.) android.permission.SET_PROCESS_FOREGROUND 允许程序当前运行程序强行到前台(Allows an application to force any currently running process to be in the foreground.) android.permission.SET_PROCESS_LIMIT 允许设置最大的运行进程数量(Allows an application to set the maximum number of (not needed) application processes that can be running. ) android.permission.SET_TIME_ZONE 允许程序设置时间区域(Allows applications to set the system time zone) android.permission.SET_WALLPAPER 允许程序设置壁纸(Allows applications to set the wallpaper ) android.permission.SET_WALLPAPER_HINTS 允许程序设置壁纸hits(Allows applications to set the wallpaper hints) android.permission.SIGNAL_PERSISTENT_PROCESSES 允许程序请求发送信号到所有显示的进程中(Allow an application to request that a signal be sent to all persistent processes) android.permission.STATUS_BAR 允许程序打开、关闭或禁用状态栏及图标Allows an application to open, close, or disable the status bar and its icons. android.permission.SUBSCRIBED_FEEDS_READ 允许一个程序访问订阅RSS Feed内容提供(Allows an application to allow access the subscribed feeds ContentProvider. ) android.permission.SUBSCRIBED_FEEDS_WRITE 系统暂时保留改设置,android开发网认为未来版本会加入该功能。 android.permission.SYSTEM_ALERT_WINDOW 允许一个程序打开窗口使用 TYPE_SYSTEM_ALERT,显示在其他所有程序的顶层(Allows an application to open windows using the type TYPE_SYSTEM_ALERT, shown on top of all other applications. ) android.permission.VIBRATE 允许访问振动设备(Allows access to the vibrator) android.permission.WAKE_LOCK 允许使用PowerManager的 WakeLocks保持进程在休眠时从屏幕消失( Allows using PowerManager WakeLocks to keep processor from sleeping or screen from dimming) android.permission.WRITE_APN_SETTINGS 允许程序写入API设置(Allows applications to write the apn settings) android.permission.WRITE_CALENDAR 允许一个程序写入但不读取用户日历数据(Allows an application to write (but not read) the user’s calendar data. ) android.permission.WRITE_CONTACTS 允许程序写入但不读取用户联系人数据(Allows an application to write (but not read) the user’s contacts data. ) android.permission.WRITE_GSERVICES 允许程序修改Google服务地图(Allows an application to modify the Google service map. ) android.permission.WRITE_OWNER_DATA 允许一个程序写入但不读取所有者数据(Allows an application to write (but not read) the owner’s data.) android.permission.WRITE_SETTINGS 允许程序读取或写入系统设置(Allows an application to read or write the system settings. ) android.permission.WRITE_SMS 允许程序写短信(Allows an application to write SMS messages) android.permission.WRITE_SYNC_SETTINGS 允许程序写入同步设置(Allows applications to write the sync settings)

下面的代码可以把指定图片设为壁纸,注意先设置权限

        Resources resources = getBaseContext().getResources(); 
        is = resources.openRawResource(R.drawable.b1);
        try {
            setWallpaper(is);
            Toast.makeText(main.this,"成功", Toast.LENGTH_LONG).show();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 

当然,b1这个图片还要自己放进drawable目录中。第一次运行的时候出错,找了很久才发现原因,原来设置壁纸也需要权限,需要在Manifest.xml文件的 前加上一行

<uses-permission android:name="android.permission.SET_WALLPAPER"/>

这段代码是原是音乐播放器中用于设置音乐文件目录的,所以代码中直接把文件过滤掉了,只显示目录,如果要改个资源管理器,还是很简单的。

    public void showDir(String dir){
        Dir=new ArrayList();
        path=new ArrayList();
        File f=new File(dir);
        tv1.setText(dir);
        File[] files=f.listFiles();
        if(!dir.equals("/"))
        {
          /* 回到上层目录 */
          Dir.add("Back to ../");
          path.add(f.getParent());
        }

        for(int i=0;i(this,R.layout.playlist, Dir);
        lv1.setAdapter(adapter);
    }

显示文件和目录的为ListView,这里就是lv1,上面的代码是设置适配大,然后绑定

这是一段网上找的利用重力感应检测摇晃手机的速度代码,结合前几天写的音乐播放器,成功实现了甩歌功能。

package com.pocketdigi;   
import android.app.Activity;   
import android.os.Bundle;   
import android.util.Log;
import android.widget.Toast;
import android.hardware.SensorListener;
import android.hardware.SensorManager;   
import android.hardware.Sensor;   
 
 
@SuppressWarnings("deprecation")
public class main extends Activity implements SensorListener {   
    private float x, y, z,last_x,last_y,last_z;
    private long lastUpdate;
   
    protected void onCreate(Bundle savedInstanceState) {   
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main);
        SensorManager sensorMgr = (SensorManager) getSystemService(SENSOR_SERVICE); 
        Sensor sensor = sensorMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

        sensorMgr.registerListener(this,SensorManager.SENSOR_ACCELEROMETER,SensorManager.SENSOR_DELAY_GAME);  

    }

    @Override
    public void onAccuracyChanged(int sensor, int accuracy) {
        // TODO Auto-generated method stub
        
    }
    private static final int SHAKE_THRESHOLD = 5000;
    //这个控制精度,越小表示反应越灵敏
    @Override
    public void onSensorChanged(int sensor, float[] values) {
        // TODO Auto-generated method stub
        if (sensor == SensorManager.SENSOR_ACCELEROMETER) {   
            long curTime = System.currentTimeMillis();   
            // 每100毫秒检测一次   
            if ((curTime - lastUpdate) > 100) { 
            long diffTime = (curTime - lastUpdate);  
            lastUpdate = curTime;   	  
            x = values[SensorManager.DATA_X];   
            y = values[SensorManager.DATA_Y];   
            z = values[SensorManager.DATA_Z];   		  
            float speed = Math.abs(x+y+z - last_x - last_y - last_z) / diffTime * 10000;   			  
            if (speed > SHAKE_THRESHOLD) {   
                                         //检测到摇晃后执行的代码
            }  
            last_x = x;   
            last_y = y;   
            last_z = z;   
            }   
            }
        
    }
 
}

昨天在写音乐播放器,想给它加个重力感应甩歌功能,到网上找了个Demo(搜索了好久,找到N个,结果都是转载一个),结果发现却无法运行,打开就报错。今天仔细看了下代码,稍做了下修改,发现可以运行了。抄一下原作者写的注解: 以屏幕的左下方为原点(2d编程的时候,是以屏幕左上方为原点的,这个值得注意一下),箭头指向的方向为正。从-10到10,以浮点数为等级单位,想象一下以下情形: 手机屏幕向上(z轴朝天)水平放置的时侯,(x,y,z)的值分别为(0,0,10); 手机屏幕向下(z轴朝地)水平放置的时侯,(x,y,z)的值分别为(0,0,-10); 手机屏幕向左侧放(x轴朝天)的时候,(x,y,z)的值分别为(10,0,0); 手机竖直(y轴朝天)向上的时候,(x,y,z)的值分别为(0,10,0); 其他的如此类推,规律就是:朝天的就是正数,朝地的就是负数。利用x,y,z三个值求三角函数,就可以精确检测手机的运动状态了。 下面是修改过的代码,在Milestone上测试成功,在标题栏上显示当前坐标

package com.pocketdigi;   
import android.app.Activity;   
import android.os.Bundle;   
import android.hardware.SensorManager;   
import android.hardware.Sensor;   
import android.hardware.SensorEventListener;   
import android.hardware.SensorEvent;   
  
  
public class main extends Activity {   
    private float x, y, z;   
    protected void onCreate(Bundle savedInstanceState) {   
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main);
        SensorManager sensorMgr = (SensorManager) getSystemService(SENSOR_SERVICE); 
        Sensor sensor = sensorMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
        /*TYPE注解
        intTYPE_ACCELEROMETER 加速度 
        intTYPE_ALL 所有类型,NexusOne默认为 加速度 
        intTYPE_GYROSCOPE 回转仪(这个不太懂) 
        intTYPE_LIGHT 光线感应
        intTYPE_MAGNETIC_FIELD 磁场 
        intTYPE_ORIENTATION 定向(指北针)和角度 
        intTYPE_PRESSUR 压力计 
        intTYPE_PROXIMITY 距离?不太懂 
        intTYPE_TEMPERATURE 温度啦
         */
        
        SensorEventListener lsn = new SensorEventListener() {
            public void onSensorChanged(SensorEvent e) {
            	x = e.values[SensorManager.DATA_X];   
            	y = e.values[SensorManager.DATA_Y];   
            	z = e.values[SensorManager.DATA_Z];
            	setTitle("x="+(int)x+","+"y="+(int)y+","+"z="+(int)z);
            }
            
            public void onAccuracyChanged(Sensor s, int accuracy) {
            }
        };
        //注册listener,第三个参数是检测的灵敏度
        sensorMgr.registerListener(lsn, sensor, SensorManager.SENSOR_DELAY_GAME);
        /*
         SENSOR_DELAY_FASTEST 最灵敏,快的然你无语
         SENSOR_DELAY_GAME 游戏的时候用这个,不过一般用这个就够了,和上一个很难看出区别
         SENSOR_DELAY_NORMAL 比较慢。
         SENSOR_DELAY_UI 最慢的,几乎就是横和纵的区别
         */
    }
    
}

ListView是android中一个重要元素,正如它的名字,一般用于展示列表。比如要展示数据库中的N条纪录,或是列出某个目录下的文件等。看最终效果图: 布局xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<ListView  android:id="@+id/lv"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello"
    />
</LinearLayout>

列表XML:用于指定列表中每个Item的样式,文件名为playlist与下面程序中代码对应

<?xml version="1.0" encoding="utf-8"?>
<TextView 
  android:id="@+id/text1"
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="30px"
  android:textSize="18sp"
></TextView>

程序代码:

package com.pocketdigi;

import java.util.ArrayList;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.AdapterView.OnItemClickListener;

public class main extends Activity {
    /** Called when the activity is first created. */
    ListView lv;
    ArrayAdapter Adapter;
    ArrayList arr=new ArrayList();
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        lv=(ListView)findViewById(R.id.lv);
        arr.add("123");
        arr.add("234");
        arr.add("345");
        Adapter = new ArrayAdapter(this,R.layout.playlist, arr);
        lv.setAdapter(Adapter);
        lv.setOnItemClickListener(lvLis); 
    }
    private OnItemClickListener lvLis=new OnItemClickListener(){
        @Override
        public void onItemClick(AdapterView arg0, View arg1, int arg2,
                long arg3) {
            //点击条目时触发
            //arg2即为点中项的位置
            setTitle(String.valueOf(arr.get(arg2)));
                
        }
        
    };
}

设置每个Item间的分割线:

list.setDivider(null);//null为不显示分割线同,支持Drawble资源
list.setDividerHeight(height)//设置高

今天花了一天时间写的音乐播放器,之所以取名叫SimplePlayer,是因为这个播放器超级简单,仅有音乐播放功能,适合新手学习Android开发,现在放上编译好的APK程序,源码稍后奉上。下载链接:SimplePlayer

有两个Activity,A,B,由A启动B,并传数据给B,B在经过处理后把数据传回给A。举个例子,A是主程序,B是设置参数的Activity,在B修改设置后,要让A重新读取设置,就要用到回传数据.主要是两个函数startActivityForResult onActivityResult 先是A传B:

        Bundle bd = new Bundle();
             bd.putString("Dir", "/sdcard/");
        Intent intent=new Intent();
        intent.putExtras(bd);
          intent.setClass(main.this,location.class);
        startActivityForResult(intent,2);
            //这里的2是我随便写的,代表requestCode,就是用来做个标记,网上的例子好像都是写requestCode,
        //结果我在测试时A没接收到,这里必须填正数

然后就是B接收再传回:

Intent it = new Intent(); 
it.putExtra("Dir",(String) tv1.getText());
setResult(2, it);//2与前面的A里的2对应
finish();

A里的接收代码:

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        //B返回时触发
     }

这里的菜单指的是,按手机menu按钮时出现在屏幕底部的菜单。Menu不需要在xml中定义,直接在程序中插入即可。

  protected static final int MENU_Set=Menu.FIRST;
    protected static final int MENU_about=Menu.FIRST+1;
    
    public boolean onCreateOptionsMenu(Menu menu){
        super.onCreateOptionsMenu(menu);
        menu.add(0,MENU_Set,0,"设置目录");
        menu.add(0,MENU_about,0,"关于");
    //组id,选项id(直接用数字就可以,不要重复,这样就不需要定义MENU_Set和MENU_about),排序(小在前),选项名
    return super.onCreateOptionsMenu(menu);
        
    };
    public boolean onOptionsItemSelected(MenuItem Item){
        super.onOptionsItemSelected(Item);
        switch(Item.getItemId()){
        case MENU_Set:
            jump(dir);
            //点击设置时执行
            break;
        case MENU_about:
            openOptionsDialog();
            //点击关于时执行;
            break;
        }
        return super.onOptionsItemSelected(Item);
        
    }