Android应用开发揭秘(笔记) 第十章 Android应用开发实例

来源:互联网 发布:网络词汇 编辑:程序博客网 时间:2024/06/06 06:57
☆ .情景模式
1.音频管理:
通过使用AudioManager它主要来控制和访问铃声。通过如下代码获得一个AudioManager实例
Context.getSystemService( Context.AUDIO_SERVICE )
AudioManager的常用信息:
ADJUST_LOWER                减小铃声声音
ADJUST_RAISE                增加铃声声音
ADJUST_SAME                 保持原来的铃声声音
EXTRA_RINGR_MODE            新的铃声模式
EXTRA_VIBRATE_SETTING       新的特殊的振动模式
EXTRA_VIBRATE_TYPE          振动类型
FLAG_PLAY_SOUND             当调节音量时,是否播放(预览效果)
FLAG_VIBRATE                是否振动
MODE_CURRENT                无效音频模式
MODE_INVALID                在调用的音频模式
MODE_IN_CALL                普通音频模式
MODE_RINGTONE               响铃模式

AudioManager方法:
adjustVolume                调整音量大小  
getMode                     获得当前音频模式
getRingerMode               获得当前铃声模式
getStreamMaxVolume          得到最大音频指数
getStreamVolume             得到当前音频指数
isSpeakerphoneOn            扬声器是否打开
loadSoundEffects            加载声音效果
playSoundEffect             播放声音效果
setMicrophoneMute           设置麦克风静音和关闭
setMode                     设置音频模式
setRingerMode               设置铃声模式
setSpeakerphoneON           设置扬声器打开和关闭
setVibrateSetting           当铃声模式改变时,设置振动类型

//如下代码设置了铃声又振动的模式
audio.setRingerMode(AudioManager.RINGER_MODE_NORMAL );
audio.setVibrateSetting( AudioManager.VIBRATE_TYPE_RINGER,AudioManager.VIBRATE_SETTING_NO);
audio.setVibrateSetting( AudioManager.VIBRATE_TYPE_NOTIFICATION, AudioManager.VIBRATE_SETTING_NO );

//如下代码设置静音模式
audio.setRingerMode( AudioManager.RINGER_MODE_SILENT );
audio.setVibrateSetting( AudioManager.VIBRATE_TYPE_RINGER, AduioManager_VIBRATE_SETTING_OFF );
audio.setVibrateSetting( AudioManager.VIBRATE_TYPE_NOTIFICATION, AudioManager.VIBRATE_SETTING_OFF );

2.AlarmManager与PendingInent
由于使用了定时情景模式,需要用到AlarmManager来控制定时器。可以通过set(int type, long tiggerAtTime, PendingIntent operation )来注册一个定时器。
注册时,发送定时时间时,需要一个重要参数PendingIntent,它负责传递定时信息,既要将信息发送出去,也要对发送后的状态进行处理。通过调用getActivity(Context, int, Intent, int),
getBroadcast(Context, int ,Intent, int),getService( Context,int ,Intent, int)函数得到一个PendingIntent实例。
通过getBroadcast获得PendingIntent将实现广播的功能,就想调用Context.sendBroadcast()函数一样。
处理一个定时器的方法:
void ring(){
    Intent intent = new Intent( RingBroadcastReceiver.RING_CHANGED );
    intent.putExtra( "checkedId", R.id.ring02 );
    PendingIntent alarmIntent = PendingIntent.getBroadcast( this, RingBroadcastReceiver.REQUEST_CODE, intent, 0 );
    mAlarmManager.set( AlarmManager.RTC_WAKEUP, getTime(), alarmIntent );
}
3.BroadcastReceiver( 广播接收器 )
当应用程序所设置的时间到了后,系统中的AlarmManagerService就会从系统底层获取一个闹铃事件,并从自己维护的队列中取出与其匹配的信息,然后通过其应用注册的PendingIntent把该闹铃
事件发回给应用。

4.权限处理
最后需要对应用程序中使用BroadcastReceiver以及所使用的一些Action进行注册和声明:
代码如下:
< receiver android:name="RingBroadcastReceiver">
<intent-filter>
    <action android:name="com.yarin.android.RingProfile.RV_CHANGED" />
    <action android:name="com.yarin.android.RingProfile.RING_CHANGED" />
    <action android:name="com.yarin.android.RingProfile.VIBRATE_CHANGED" />
    <action android:name="com.yarin.android.RingProfile.SILENT_CHANGED" />
</intent-filter>
</receiver>