首页 > 代码库 > Android之来电铃声设置

Android之来电铃声设置

                                             Android之来电铃声设置

 

从文件管理器中设置一首歌曲为来电铃声铃声,进入拨号盘设置中点击提示音和振动,来电铃声就会变成默认铃声

从文件管理器中设置一首歌曲为来电铃声铃声,进入拨号盘设置中点击提示音和振动,来电铃声就会变成默认铃声
歌曲是SD卡中的
1.进入文件管理器
2.从SD卡中设置一首歌曲为来电铃声
3.进入settings》》提示音和通知》》手机铃声,查看来电铃声的歌曲是刚刚设置的外部歌曲
4.进入拨号盘设置中,点击提示音和振动
5.返回settings》》提示音和通知》》手机铃声,查看来电铃声
来电铃声的歌曲应该还是刚刚设置的外部歌曲
来电铃声变回了默认铃声

首先分享一下一些常用的命令:

3.在cmd终端下进行activity的查看命令"START u0"
adb logcat | findstr /C:"START u0"
adb shell logcat | grep "START u0"
logcat | findstr /C:"BDC-Calling"
adb logcat -s AndroidRuntime
adb logcat -s sound_trigger_hw_default
adb logcat | findstr Ringer
adb logcat -s System.err
adb shell cat /data/system/audio_profile/0/settings.ini
/storage/emulated/0/liunian/
adb pull /data/data/com.android.providers.telephony/
adb pull /data/data/com.android.providers.settings/
adb pull /data/data/com.android.providers.media/
adb logcat -s SettingsInterface | findstr audioprofile

adb logcat -s AudioProfileService | findstr updateRintone
在调试设备的时候。想要对文件进行读写
于是使用adb remount
出现提示,请使用 “adb disable-verity”
于是使用adb disable-verity 的命令

这些命令会帮助我们快速分析问题

接着说:

这个问题是与sim 卡有关的,必须插sim 卡才可以,因为需要获得soltId

subId相当于_id,类似于1,2,3之类的id保证唯一性

slotId与卡槽有关系,sim卡在卡槽1里slotId==0

sim卡在卡槽2里slotId==1

当手机里不插sim卡时,slotId==-1

在MTK67xx/packages/apps/Settings/src/com/mediatek/audioprofile/DefaultRingtonePreference.java中

 

if (FeatureOption.MTK_MULTISIM_RINGTONE_SUPPORT && simNum == SINGLE_SIMCARD) {

int subId = SubscriptionManager.from(getContext()).getActiveSubscriptionIdList()[0];

 

setSimId(subId);

//setSimId(1);

}

 

if (isNoNeedSIMSelector() || simNum <= SINGLE_SIMCARD) {

super.onClick();

 

}

}

 

修改为:

if (FeatureOption.MTK_MULTISIM_RINGTONE_SUPPORT && simNum == SINGLE_SIMCARD) {

int subId = SubscriptionManager.from(getContext()).getActiveSubscriptionIdList()[0];

 

//xxx begin

int slotId = SubscriptionManager.getSlotId(subId);

 

if(slotId == 1){

subId = 2;

 

}else if(slotId == 0){

subId = 1;

 

}

//xxx end

setSimId(subId);

 

//setSimId(1);

}

在MTK6735/packages/apps/Settings/src/com/mediatek/audioprofile/Editprofile.java中

if (requestCode == REQUEST_CODE) {

if (resultCode == Activity.RESULT_OK) {

mSimId = data.getLongExtra(PhoneConstants.SUBSCRIPTION_KEY,

SubscriptionManager.INVALID_SUBSCRIPTION_ID);

setRingtoneSIMId(mSimId);

}

Log.v("@M_" + TAG, "Select SIM id = " + mSimId);

 

修改为:

if (requestCode == REQUEST_CODE) {

 

if (resultCode == Activity.RESULT_OK) {

mSimId = data.getLongExtra(PhoneConstants.SUBSCRIPTION_KEY,

 

SubscriptionManager.INVALID_SUBSCRIPTION_ID);

//xxx begin

 

int slotId = SubscriptionManager.getSlotId((int) mSimId);

if(slotId == 1){

 

mSimId = 2;

}else if(slotId == 0){

 

mSimId = 1;

}

 

//xxxend

setRingtoneSIMId(mSimId);

 

}

Log.v("@M_" + TAG, "Select SIM id = " + mSimId);

 

这个两文件的修改的作用是在sd中的音乐设置为来电铃声后

进到设置中进提示音进手机铃声可以看到选择的正是自己设置的那首音乐

但是来电的时候响起的还是默认铃声

还有一个文件要修改

在MTK6753_M_Xxx/packages/services/Telecomm/src/com/android/server/telecom/Ringer.java

PhoneAccount account = tm.getPhoneAccount(phoneAccountHandle);

if (account != null) {

 

subId = tem.getSubIdForPhoneAccount(account);

}

 

} catch(Exception e) {

e.printStackTrace();

 

Log.d(this, "getSubIdForPhoneAccount error: " + e.toString());

}

 

}

}

 

AudioProfileManager audioProfileMgr = (AudioProfileManager) mContext

.getSystemService(Context.AUDIO_PROFILE_SERVICE);

 

Uri ringtoneUri = audioProfileMgr.getRingtoneUri(audioProfileMgr.getActiveProfileKey() , AudioProfileManager.TYPE_RINGTONE, subId);

修改成

}

 

//xxx begin

int slotId = SubscriptionManager.getSlotId(subId);

if(slotId == 1){

 

subId = 2;

}else if(slotId == 0){

 

subId = 1;

}

//xxx end

AudioProfileManager audioProfileMgr = (AudioProfileManager) mContext .getSystemService(Context.AUDIO_PROFILE_SERVICE);

 

Uri ringtoneUri = audioProfileMgr.getRingtoneUri(audioProfileMgr.getActiveProfileKey() , AudioProfileManager.TYPE_RINGTONE, subId);

这样来电铃声就为sd卡中设置的音乐了

Android之来电铃声设置