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

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

intsubId =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){

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

//xxx begin

intslotId =SubscriptionManager.getSlotId(subId);

if(slotId ==1){

subId =2;

}elseif(slotId ==0){

subId =1;

}

//xxx end

setSimId(subId);

//setSimId(1);

}

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

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

if(slotId ==1){

mSimId =2;

}elseif(slotId ==0){

mSimId =1;

}

//xxxend

setRingtoneSIMId(mSimId);

}

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

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

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

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

还有一个文件要修改

PhoneAccountaccount =tm.getPhoneAccount(phoneAccountHandle);

if(account !=null){

subId =tem.getSubIdForPhoneAccount(account);

}

}catch(Exceptione){

e.printStackTrace();

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

}

}

}

AudioProfileManageraudioProfileMgr =(AudioProfileManager)mContext

.getSystemService(Context.AUDIO_PROFILE_SERVICE);

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

修改成

}

//xxx begin

intslotId =SubscriptionManager.getSlotId(subId);

if(slotId ==1){

subId =2;

}elseif(slotId ==0){

subId =1;

}

//xxx end

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

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

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在安卓应用程序中,你可以通过以下步骤更改来电铃声: 1. 在你的应用程序中,创建一个选择铃声的界面,例如一个列表或网格视图,显示可用的铃声。 2. 通过使用MediaStore类中的查询方法,从系统中获取可用的铃声列表。 3. 对列表进行适当的处理和呈现,以便用户可以选择他们喜欢的铃声。你可能需要使用一个适配器类来显示列表中的铃声。 4. 当用户选择铃声时,调用RingtoneManager类中的setActualDefaultRingtoneUri()方法,将所选铃声的URI设置来电铃声的默认值。 5. 如果用户想要设置来电铃声为自定义铃声,则需要使用Android的权限系统来授予应用程序访问存储权限,以便在用户设备上读取铃声文件。 下面是一个简单的代码流程示例,用于从系统中获取可用的铃声列表,并将所选铃声设置来电铃声: ```java // 获取铃声的URI列表 Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; String[] projection = { MediaStore.Audio.Media._ID, MediaStore.Audio.Media.DISPLAY_NAME }; String selection = MediaStore.Audio.Media.IS_RINGTONE + "!= 0"; Cursor cursor = getContentResolver().query(uri, projection, selection, null, null); // 处理铃声列表 ArrayList<String> ringtoneList = new ArrayList<String>(); while (cursor.moveToNext()) { String ringtoneName = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME)); ringtoneList.add(ringtoneName); } // 显示铃声列表,让用户选择一个铃声 // ... // 设置所选铃声来电铃声 Uri selectedRingtoneUri = Uri.parse("content://media/external/audio/media/" + ringtoneId); RingtoneManager.setActualDefaultRingtoneUri(context, RingtoneManager.TYPE_RINGTONE, selectedRingtoneUri); ``` 请注意,上述示例仅涵盖了从系统中获取铃声列表和设置所选铃声来电铃声的基本步骤。在实际应用中,你需要考虑到更多的细节和异常情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值