《手机特色功能》PPT课件.pptx
ANDROID课程讲义课程讲义-手机特色功能手机特色功能手机特色功能重点内容系统设置Configuration传感器语音识别桌面组件系统设置CONFIGURATION系统的设置变化对应用程产生影响朝向、导航等Configuration类封装了所有的设置信息下Orientation:ORIENTATION_LANDSCAPE,ORIENTATION_PORTRAIT,ORIENTATION_SQUAREKeyboard:KEYBOARD_NOKEYS,KEYBOARD_QWERTY,KEYBOARD_12KEYNavigation:NAVIGATION_NONAV,NAVIGATION_DPAD,NAVIGATION_TRACKBALL,NAVIGATION_WHEELTouchscreen:TOUCHSCREEN_NOTOUCH,TOUCHSCREEN_STYLUS,TOUCHSCREEN_FINGERAcitivity的onConfigurationChanged方法响应系统设置变化系统设置-实例1通过按钮设置屏幕方式,并显示屏幕设置属性if(Sample_12_1.this.getRequestedOrientation()=-1)Toast.makeText(Sample_12_1.this,无法获取!,Toast.LENGTH_LONG).show();else if(Sample_12_1.this.getRequestedOrientation()=ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)Sample_12_1.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);else if(Sample_12_1.this.getRequestedOrientation()=ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)Sample_12_1.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);系统设置-实例1属性发生变化,系统自动调用onConfigurationChanged()方法Overridepublic void onConfigurationChanged(Configuration newConfig)Toast.makeText(this,系统的屏幕方向发生改变,Toast.LENGTH_LONG).show();updateEditText();/更新EditText显示的内容super.onConfigurationChanged(newConfig);系统设置-实例1更改文本显示public void updateEditText()int o=getRequestedOrientation();/获取屏幕朝向switch(o)/判断屏幕当前朝向case ActivityInfo.SCREEN_ORIENTATION_PORTRAIT:et.setText(当前屏幕朝向为:PORTRAIT);break;case ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE:et.setText(当前屏幕朝向为:LANDSCAPE);break;系统设置-实例2设置手机背景图片组保存方式(标准方式)int imgIds=/图片资源的id数组R.drawable.w1,R.drawable.w2,R.drawable.w3,;int selectedIndex=-1;/被选中的图片在id数组中的索引系统设置-实例2设置手机背景获得图片资源,使用设置函数Resources r=Sample_12_2.this.getResources();/获得Resources对象InputStream in=r.openRawResource(imgIdsselectedIndex);/获得InputStream对象try setWallpaper(in);/设置墙纸 catch(IOException e)e.printStackTrace();图片的显示和选择,可采用Galllery控件。系统设置-实例手机震动功能主要应用的方法和属性Vibrator vibrator;/声明一个Vibrator对象 vibrator=(Vibrator)getSystemService(Service.VIBRATOR_SERVICE);/创建Vibrator对象vibrator.vibrate(new long1000,50,50,100,50,-1);/启动振动vibrator.cancel();/关闭振动vibrator.vibrate(2500);/启动振动课上实验:设计界面,利用一个按钮打开或关闭震动。震动的时课上实验:设计界面,利用一个按钮打开或关闭震动。震动的时间随机。间随机。系统设置-实例4获得手机SIM信息 tm=(TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);ArrayList listValues=new ArrayList();listValues.add(tm.getDeviceId();/获取设备编号 listValues.add(tm.getSimCountryIso();/获取SIM卡国别 listValues.add(tm.getSimSerialNumber();/获取SIM卡序列号 listValues.add(simStatetm.getSimState();/获取SIM卡状态 listValues.add(tm.getDeviceSoftwareVersion()=null?tm.getDeviceSoftwareVersion():未知);/获取软件版本 listValues.add(tm.getNetworkOperator();/获取网络运营商代号 listValues.add(tm.getNetworkOperatorName();/获取网络运营商名称 listValues.add(phoneTypetm.getPhoneType();/获取手机 制式 listValues.add(tm.getCellLocation().toString();/获取设备当前位置其他的系统属性设置电池电量IntentFilter filter=new IntentFilter(Intent.ACTION_BATTERY_CHANGED);registerReceiver(mbr,filter);/注册BroadcastReceiver /在其中处理Intent获得电量信息int current=intent.getExtras().getInt(level);/获得当前电量int total=intent.getExtras().getInt(scale);/获得总电量音量调节 AudioManager am;/声明AudioManager对象am.setStreamMute(AudioManager.STREAM_MUSIC,!isChecked);/设置是否静音am.adjustStreamVolume(AudioManager.STREAM_MUSIC,AudioManager.ADJUST_RAISE,AudioManager.FLAG_SHOW_UI);/调高声音传感器种类加速度传感器(accelerometer),陀螺仪(gyroscope),环境光照传感器(light),磁力传感器(magnetic field),方向传感器(orientation),压力传感器(pressure),距离传感器(proximity),温度传感器(temperature)。采样率 最快、游戏、普通、用户界面。当应用程序请求特定的采样率时,其实只是对传感器子系统的一个提示,或者一个建议。不保证特定的采样率可用。准确性 高、低、中、不可靠。传感器传感器类型常量传感器类型常量内部整数值中文名称Sensor.TYPE_ACCELEROMETER1加速度传感器Sensor.TYPE_MAGNETIC_FIELD2磁力传感器Sensor.TYPE_ORIENTATION 3方向传感器Sensor.TYPE_GYROSCOPE 4陀螺仪传感器Sensor.TYPE_LIGHT 5环境光照传感器Sensor.TYPE_PRESSURE 6压力传感器Sensor.TYPE_TEMPERATURE 7温度传感器Sensor.TYPE_PROXIMITY 8距离传感器传感器传感器管理Android所有的传感器都归传感器管理器SensorManager 管理,获取传感器管理器的方法很简单:String service_name=Context.SENSOR_SERVICE;SensorManager sensorManager=(SensorManager)getSystemService(service_name);Sensor defaultGyroscope=sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);传感器获得传感器从传感器管理器中获取其中某个或者某些传感器的方法有如下三种:第一种:获取某种传感器的默认传感器 Sensor defaultGyroscope=sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);第二种:获取某种传感器的列表 List pressureSensors=sensorManager.getSensorList(Sensor.TYPE_PRESSURE);第三种:获取所有传感器的列表List allSensors=sensorManager.getSensorList(Sensor.TYPE_ALL);传感器获取传感器参数方法描述getMaximumRange()最大取值范围getName()设备名称getPower()功率getResolution()精度getType()传感器类型getVentor()设备供应商getVersion()设备版本号传感器获取手机传感器清单获取手机传感器清单main.xml传感器获取手机传感器清单获取手机传感器清单/从系统服务中获得传感器管理器SensorManager sm=(SensorManager)getSystemService(Context.SENSOR_SERVICE);/从传感器管理器中获得全部的传感器列表List allSensors=sm.getSensorList(Sensor.TYPE_ALL);/显示有多少个传感器tx1.setText(该手机有+allSensors.size()+个传感器n);/显示每个传感器的具体信息for(Sensor s:allSensors)String tempString=n+设备名称:+s.getName()+n+设备版本:+s.getVersion()+n+供应商:+s.getVendor()+n;switch(s.getType()case Sensor.TYPE_ACCELEROMETER:tx1.setText(tx1.getText().toString()+s.getType()+加速度传感器accelerometer+tempString);break;传感器获取手机传感器清单获取手机传感器清单管理类:SensorManager 所有传感器的一个综合管理类,包括了传感器的种类、采样率、精准度等。交互接口:SensorEventListener应用程序必须注册以侦听与一个或多个传感器相关的活动。显示界面Boolean mRegisteredSensor=mSensorManager.registerListener(this,sensor,SensorManager.SENSOR_DELAY_FASTEST)mRegisteredSensor.unregisterListener(this)传感器交互接口:SensorEventListener 此接口是使用传感器的核心部分。必须实现如下方法:ponSensorChanged(SensorEvent event):传感器值更改触发对象event可获得具体的改变数据,包括方向、加速度等。float x=event.valuesSensorManager.DATA_X;.ponAccuracyChanged(Sensor sensor,int accuracy):传感器精准度更改触发。参数accuray表示新的精准度。实例代码-见同目录IBMEyes.java语言识别语言识别语音识别语音将会是手机输入的一次新的革新iphone 有语音识别用的是Google 的技术,做为Google 力推的Android 自然会将其核心技术往Android 系统里面植入,并结合google 的云端技术将其发扬光大。语音识别,借助于云端技术可以识别用户的语音输入,包括语音控制等技术,语音识别关键类RecognizerIntent它包括一些常量来表示语音模式语音识别关键代码/通过Intent传递语音识别的模式,开启语音 Intentintent=newIntent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);/语言模式和自由形式的语音识别 intent.putExtra(RecognizerIntent.EXTRA_ LANGUAGE_MODEL,RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);/提示语音开始 intent.putExtra(RecognizerIntent.EXTRA_ PROMPT,开始语音);/开始执行我们的Intent、语音识别 startActivityForResult(intent,VOICE_RECOGNITION_REQUEST_CODE);桌面组件Android平台上各种图标快捷方式(shortcuts),实时文件夹(Live Folder)和桌面插件(Widget)。桌面组件快捷方式设置新应用程序的快捷方式首先需要在Activity注册时添加一个Action为的IntentFilter。其次在应用程序中设置快捷方式的名字、图标、事件等属性。桌面组件快捷方式/要添加的快捷方式的Intent Intent addShortcut;/判断是否要添加快捷方式 if(getIntent().getAction().equals(Intent.ACTION_CREATE_SHORTCUT)addShortcut=new Intent();/设置快捷方式的名字 addShortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME,发送邮件);/构建快捷方式中专门的图标 Parcelable icon=Intent.ShortcutIconResource.fromContext(this,R.drawable.mail_edit);/添加快捷方式图标 addShortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,icon);/构建快捷方式执行的Intent Intent mailto=new Intent(Intent.ACTION_SENDTO,Uri.parse(mailto:);/添加快捷方式Intent addShortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT,mailto);setResult(RESULT_OK,addShortcut);/正常 桌面组件实时文件夹Android1.5以后,Live Folder是一个备受关注的新功能。由于Live Folders本身不存储任何信息,都是以映射的方式查看其ContentProvider所指向的数据信息,并可以自定义显示格式,所以当源数据发生改变后,Live Folders可以实时更新显示内容。举例说明功能:通过Live Folders调用电话本中的信息,当点击其中一条信息时,便执行呼叫该联系人的动作。桌面组件首先:在Activity注册时添加一个Action动作为android.intent.action.CREATE_LIVE_FOLDER的IntentFilter。需要在程序中设置该实时文件夹的数据源、图标、名字的信息。可以通过intent.setData方法来设置要读取的数据源,该例中我们设置数据源为“content:/contacts/live_folders/people”,即联系人信息。桌面组件需要在onCreate方法中将实时文件夹的相关信息装入Intent对象,并通过setResult方法设置为结果Intent。if(getIntent().getAction().equals(LiveFolders.ACTION_CREATE_LIVE_FOLDER)Intent intent=new Intent();/设置数据地址 intent.setData(Uri.parse(content:/contacts/live_folders/people);/设置单击之后的事件,这里单击一个联系人后,呼叫 intent.putExtra(LiveFolders.EXTRA_LIVE_FOLDER_BASE_INTENT,new Intent(Intent.ACTION_CALL,Contacts.People.CONTENT_URI);/设置实时文件夹的名字 intent.putExtra(LiveFolders.EXTRA_LIVE_FOLDER_NAME,电话本);/设置实施文件夹的图标 intent.putExtra(LiveFolders.EXTRA_LIVE_FOLDER_ICON,Intent.ShortcutIconResource.fromContext(this,R.drawable.contacts);/设置显示模式为列表 intent.putExtra(LiveFolders.EXTRA_LIVE_FOLDER_DISPLAY_MODE,LiveFolders.DISPLAY_MODE_LIST);setResult(RESULT_OK,intent);桌面组件Widget开发作为Web 2.0服务或互联网内容的前端。可以提供个full-featured apps的预览。指定一个保留的空间来显示应用提供的自定义内容。每个Widget就是一个BroadcastReceiver。AppWidget framework通过Broadcast intents和Widget通信,Widget的更新使用RemoteViews来发送。允许程序显示一些常用而又重要的信息在用户的Home screen(桌面主屏)上谢谢!