在framework/base/package/SettingsProvider/src/DatabaseHelper.java的方法loadGlobalSettings中添加如下内容:
loadStringSetting(stmt,Settings.Gloval.USB_BATTERY_SOUND,R.string.def_usb_battery_sound);

参数stmt定义和初始化

SQLiteStatement stmt=null;
stmt=db.compileStatement(“INSERT OR IGNORE INTO global(name,value)”+” VALUES(?,?);”);

loadStringSettingàloadSetting

private void loadSetting(SQLiteStatement stmt,String key,Object value){
stmt.bindString(1,key);
stmt.bindString(2,value.toString());
stmt.execute();
}//这个方法实际上就是把数据存入数据库的操作

SQLiteStatement的使用见https://liuzhichao.com/p/1664.html


参数Settings.Gloval.USB_BATTERY_SOUND是在framework/base/core/java/android/provider/Settings里面添加的URI

/**
*URI for the charge sound file.
*@hide(不对外部开发)
*/
public static final String USB_BATTERY_SOUND=”usb_battery_sound”;


参数R.string.def_usb_battery_sound是在framework/base/package/SettingsProvider/res/value/defaults.xml中定义的文件路径,如下
<string name=”def_usb_battery_sound” translatable=”false”>/system/media/audio/notifications/Hs_in_charger.mp3</string>

该文件是通过mk文件拷贝到相应路径下的,framework/base/data/sounds/AllAudio.mk中添加

$(LOCAL_PATH)/notifications/Hs_in_charger.mp3:system/media/audio/notifications/Hs_in_charger.mp3 \

首先要在路径$(LOCAL_PATH)/notifications/下放入文件Hs_in_charger.mp3

播放提示音添加的代码,位置是framework/base/packages/SystemUI/src/com/android/systemui/power/PowerUI.java

1.导入用到的类

import android.media.MediaPlayer;
import android.media.AudioManager;
import android.net.Uri;
import android.os.Vibrator;

2.设置振动间隔

private static final long[] sVibratePattern={50,200};


3.在onReceive方法中添加

if(plugged && !oldPlugged){
playSoundbattery();//判断当前USB是否插入,如果插入,播放提示音
}

4. 编写播放提示音的方法
4.private void playSoundbattery(){
MediaPlayer player=new MeidaPlayer();
final ContentResolver cr=mContext.getContentResolver();
final String mSoundPath=Settings.Global.getString(cr,
Settings.Global.USB_BATTERY_SOUND);//得到之前载入到数据库的文件路径
if(mSoundPath!=null){
final Uri soundUri=Uri.parse(“file://”+mSoundPath);
try{
player.setDataSource(mContext,soundUri);
}catch(Exception e){
e.printStackTrace();
}
}

final AudioManager audioManager=
(AudioManager)mContext.getSystemService(Context.AUDIO_SERVICE);
if(audioManager.getStreamVolume(AudioManager.STREAN_RING)!=0){
player.setAudioStreamType(AudioManager.STREAM_RING);//设置音量
try{
player.prepare();
}catch(Exception e){
e.printStackTrace();
}
player.start();
}

//only in silent mode vibrator work
if(audioManager.getRingerMode()==AudioManager.RINGER_MODE_SILENT||
audioManager.getRingerMode()==AudioManager.RINGER_MODE_VIBRATE){
Vibrator vibrator=(Vibrator)mContext.getSystemService(Context.VIBRATOR_SERVICE);
if(vibrator!=null){
vibrator.vibrate(sVibratePattern,-1);
//Vibrator shold shutdown at onStop,but if it won’t
try{
Thread.sleep(1000);
vibrator.cancel();
}catch(Exception e){
e.printStackTrace();
}
}
}
}





更多相关文章

  1. Android MediaCodec硬解码AAC音频文件(实时AAC音频帧)并播放
  2. jni读取assets资源文件
  3. 使用adb从android手机拉取文件到电脑
  4. Android Studio 集成 ShareSDK 如何 覆盖 文件夹
  5. Android 自动编译、打包生成apk文件 1 - 命令行方式
  6. 如何将文件路径从.java类文件传递到本机jni文件
  7. android MediaScanner 扫出来的ID3 MP3文件演唱者信息 乱码
  8. Android的支持库 && app/apk包进系统 && 预置so库进系统 && 预置
  9. 路径提供者文档目录是一个安全的位置吗?

随机推荐

  1. PHP环境搭建和编写API接口
  2. ajax php bomt头 utf-8带来的奇怪问题。
  3. MySQL错误1046:未选择数据库
  4. PHP 开发环境配置
  5. php使用gd库将文字转换成图片
  6. 纯php文件不加结束标记的好处
  7. php二维码/26行代码制作php二维码phpqrco
  8. 使用GMail SMTP服务器从PHP页面发送电子
  9. 如何找到数组的大小
  10. 为什么在php.ini中设置了date.timezone =