[Audio Profile]L版本上music如何设置双卡铃声
来源:互联网 发布:社区圈子源码 编辑:程序博客网 时间:2024/05/16 13:45
[DESCRIPTION]
打开情景模式的设置双卡铃声的feature:MTK_MULTISIM_RINGTONE_SUPPORT,Music中却不能设置双卡铃声。
希望能在Music添加菜单“Us as SIM1/SIM2 ringtone”
[SOLUTION]
首先需要有双卡铃声的patch,这个patch是我司通过eService给的对比包。如果客户双卡铃声没有问题,则证明已经通过eService拿了patch。并且MTK_MULTISIM_RINGTONE_SUPPORT设为true。
1,string.xml,添加新的string ringtone_as_sim1_menu和ringtone_as_sim2_menu :
<string name="ringtone_as_sim1_menu">Use as SIM1 ringtone</string>
<string name="ringtone_as_sim2_menu">Use as SIM2 ringtone</string>
2,TrackBrowserActivity.java:
1),添加:
// start modify Music MultiSim
import android.telephony.TelephonyManager;
import android.telephony.SubscriptionManager;
import android.os.SystemProperties;
import android.telephony.SubInfoRecord;
import java.util.List;
// end modify Music MultiSim
<string name="ringtone_as_sim1_menu">Use as SIM1 ringtone</string>
<string name="ringtone_as_sim2_menu">Use as SIM2 ringtone</string>
2,TrackBrowserActivity.java:
1),添加:
// start modify Music MultiSim
import android.telephony.TelephonyManager;
import android.telephony.SubscriptionManager;
import android.os.SystemProperties;
import android.telephony.SubInfoRecord;
import java.util.List;
// end modify Music MultiSim
2),menu根据插卡情况添加Us as SIM1 ringtone/Us as SIM2 ringtone,若没有插卡,则没有设置铃声选项 参考//start modify和//end modify之间的修改
public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuInfoIn) {
...
if (MusicFeatureOption.IS_SUPPORT_DRM) {
isDrm = mTrackCursor.getInt(mTrackCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.IS_DRM));
int drmMethod = mTrackCursor.getInt(mTrackCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DRM_METHOD));
if (isVoiceCapable && canDispalyRingtone(isDrm, drmMethod)) {
//start modify Music MultiSim
final TelephonyManager mTeleManager = (TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE);
int simNum = SubscriptionManager.getActiveSubInfoCount();
MusicLogUtils.d(TAG, "simNum:" + simNum);
if(SystemProperties.get("ro.mtk_multisim_ringtone").equals("1")){
if(simNum==2){
menu.add(0, USE_AS_SIM1_RINGTONE, 0, R.string.ringtone_as_sim1_menu);//ringtone_as_sim1_menu
menu.add(0, USE_AS_SIM2_RINGTONE, 0, R.string.ringtone_as_sim2_menu);//ringtone_as_sim2_menu
}else if(simNum==1){
menu.add(0, USE_AS_RINGTONE, 0, R.string.ringtone_menu);
}
}else //end modify Music MultiSim
menu.add(0, USE_AS_RINGTONE, 0, R.string.ringtone_menu);
}
} else {
if (isVoiceCapable) {
//start modify Music MultiSim
final TelephonyManager mTeleManager = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);
int simNum = SubscriptionManager.getActiveSubInfoCount();
MusicLogUtils.d(TAG, "simNum:" + simNum);
if(SystemProperties.get("ro.mtk_multisim_ringtone").equals("1")){
if(simNum==2){
menu.add(0, USE_AS_SIM1_RINGTONE, 0, R.string.ringtone_as_sim1_menu);//ringtone_as_sim1_menu
menu.add(0, USE_AS_SIM2_RINGTONE, 0, R.string.ringtone_as_sim2_menu);//ringtone_as_sim2_menu
}else if(simNum==1){
menu.add(0, USE_AS_RINGTONE, 0, R.string.ringtone_menu);
}
}else //end modify Music MultiSim
menu.add(0, USE_AS_RINGTONE, 0, R.string.ringtone_menu);
}
}
menu.add(0, DELETE_ITEM, 0, R.string.delete_item);
...
}
public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuInfoIn) {
...
if (MusicFeatureOption.IS_SUPPORT_DRM) {
isDrm = mTrackCursor.getInt(mTrackCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.IS_DRM));
int drmMethod = mTrackCursor.getInt(mTrackCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DRM_METHOD));
if (isVoiceCapable && canDispalyRingtone(isDrm, drmMethod)) {
//start modify Music MultiSim
final TelephonyManager mTeleManager = (TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE);
int simNum = SubscriptionManager.getActiveSubInfoCount();
MusicLogUtils.d(TAG, "simNum:" + simNum);
if(SystemProperties.get("ro.mtk_multisim_ringtone").equals("1")){
if(simNum==2){
menu.add(0, USE_AS_SIM1_RINGTONE, 0, R.string.ringtone_as_sim1_menu);//ringtone_as_sim1_menu
menu.add(0, USE_AS_SIM2_RINGTONE, 0, R.string.ringtone_as_sim2_menu);//ringtone_as_sim2_menu
}else if(simNum==1){
menu.add(0, USE_AS_RINGTONE, 0, R.string.ringtone_menu);
}
}else //end modify Music MultiSim
menu.add(0, USE_AS_RINGTONE, 0, R.string.ringtone_menu);
}
} else {
if (isVoiceCapable) {
//start modify Music MultiSim
final TelephonyManager mTeleManager = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);
int simNum = SubscriptionManager.getActiveSubInfoCount();
MusicLogUtils.d(TAG, "simNum:" + simNum);
if(SystemProperties.get("ro.mtk_multisim_ringtone").equals("1")){
if(simNum==2){
menu.add(0, USE_AS_SIM1_RINGTONE, 0, R.string.ringtone_as_sim1_menu);//ringtone_as_sim1_menu
menu.add(0, USE_AS_SIM2_RINGTONE, 0, R.string.ringtone_as_sim2_menu);//ringtone_as_sim2_menu
}else if(simNum==1){
menu.add(0, USE_AS_RINGTONE, 0, R.string.ringtone_menu);
}
}else //end modify Music MultiSim
menu.add(0, USE_AS_RINGTONE, 0, R.string.ringtone_menu);
}
}
menu.add(0, DELETE_ITEM, 0, R.string.delete_item);
...
}
3),修改添加USE_AS_RINGTONE、USE_AS_SIM1_RINGTONE/USE_AS_SIM2_RINGTONE case的处理,参考//start modify和//end modify之间的修改
public boolean onContextItemSelected(MenuItem item) {
....
switch (item.getItemId()) {
....
case USE_AS_RINGTONE:
// Set the system setting to make this the current ringtone
//start modify Music MultiSim
if (SystemProperties.get("ro.mtk_multisim_ringtone").equals("1")){
List<SubInfoRecord> subInfoList = SubscriptionManager.getActiveSubInfoList();
MusicUtils.setRingtone(this, mSelectedId,subInfoList.get(0).subId);
}else
//end modify Music MultiSim
MusicUtils.setRingtone(this, mSelectedId);
return true;
//start modify Music MultiSim
case USE_AS_SIM1_RINGTONE:
// Set the system setting to make this the current ringtone1
long subId=SubscriptionManager.getSubIdUsingSlotId(0)[0];
MusicLogUtils.d(TAG, "onContextItemSelected subId= " + subId);
MusicUtils.setRingtone(this, mSelectedId,subId);
return true;
case USE_AS_SIM2_RINGTONE:
// Set the system setting to make this the current ringtone2
subId=SubscriptionManager.getSubIdUsingSlotId(1)[0];
MusicLogUtils.d(TAG, "onContextItemSelected subId= " + subId);
MusicUtils.setRingtone(this, mSelectedId,subId);
return true;
//end modify Music MultiSim
....
}
3. MediaPlaybackActivity.java
1). 引入文件
// start modify Music MultiSim
import android.telephony.TelephonyManager;
import android.telephony.SubscriptionManager;
import android.os.SystemProperties;
import android.telephony.SubInfoRecord;
import java.util.List;
// end modify Music MultiSim
import android.telephony.TelephonyManager;
import android.telephony.SubscriptionManager;
import android.os.SystemProperties;
import android.telephony.SubInfoRecord;
import java.util.List;
// end modify Music MultiSim
2)menu根据插卡情况添加Us as SIM1 ringtone/Us as SIM2 ringtone,若没有插卡,则没有设置铃声选项 参考//start modify和//end modify之间的修改
public boolean onCreateOptionsMenu(Menu menu) {
...
if (MusicUtils.isVoiceCapable(this)) {
//start modify Music MultiSim
final TelephonyManager mTeleManager = (TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE);
int simNum = SubscriptionManager.getActiveSubInfoCount();
MusicLogUtils.d(TAG, "simNum:" + simNum);
if(SystemProperties.get("ro.mtk_audio_profiles").equals("1") && SystemProperties.get("ro.mtk_multisim_ringtone").equals("1")){
if(simNum==2){
menu.add(0, USE_AS_SIM1_RINGTONE, 0, R.string.ringtone_as_sim1_menu).setIcon(
R.drawable.ic_menu_set_as_ringtone);
menu.add(0, USE_AS_SIM2_RINGTONE, 0, R.string.ringtone_as_sim2_menu).setIcon(
R.drawable.ic_menu_set_as_ringtone);
}else if(simNum==1){
menu.add(0, USE_AS_RINGTONE, 0, R.string.ringtone_menu_short).setIcon(
R.drawable.ic_menu_set_as_ringtone);
}
}else
//end modify Music MultiSim
menu.add(0, USE_AS_RINGTONE, 0, R.string.ringtone_menu_short).setIcon(
R.drawable.ic_menu_set_as_ringtone);
}
menu.add(0, DELETE_ITEM, 0, R.string.delete_item)
.setIcon(R.drawable.ic_menu_delete);
/// M: move to prepare option menu to disable menu when MusicFX is disable
...
return true;
}
return false;
}
...
if (MusicUtils.isVoiceCapable(this)) {
//start modify Music MultiSim
final TelephonyManager mTeleManager = (TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE);
int simNum = SubscriptionManager.getActiveSubInfoCount();
MusicLogUtils.d(TAG, "simNum:" + simNum);
if(SystemProperties.get("ro.mtk_audio_profiles").equals("1") && SystemProperties.get("ro.mtk_multisim_ringtone").equals("1")){
if(simNum==2){
menu.add(0, USE_AS_SIM1_RINGTONE, 0, R.string.ringtone_as_sim1_menu).setIcon(
R.drawable.ic_menu_set_as_ringtone);
menu.add(0, USE_AS_SIM2_RINGTONE, 0, R.string.ringtone_as_sim2_menu).setIcon(
R.drawable.ic_menu_set_as_ringtone);
}else if(simNum==1){
menu.add(0, USE_AS_RINGTONE, 0, R.string.ringtone_menu_short).setIcon(
R.drawable.ic_menu_set_as_ringtone);
}
}else
//end modify Music MultiSim
menu.add(0, USE_AS_RINGTONE, 0, R.string.ringtone_menu_short).setIcon(
R.drawable.ic_menu_set_as_ringtone);
}
menu.add(0, DELETE_ITEM, 0, R.string.delete_item)
.setIcon(R.drawable.ic_menu_delete);
/// M: move to prepare option menu to disable menu when MusicFX is disable
...
return true;
}
return false;
}
3),修改添加USE_AS_RINGTONE、USE_AS_SIM1_RINGTONE/USE_AS_SIM2_RINGTONE case的处理,参考//start modify和//end modify之间的修改
case USE_AS_RINGTONE: {
// Set the system setting to make this the current ringtone
if (mService != null) {
//start modify Music MultiSim
if (SystemProperties.get("ro.mtk_multisim_ringtone").equals("1")){
List<SubInfoRecord> subInfoList = SubscriptionManager.getActiveSubInfoList();
MusicUtils.setRingtone(this, mService.getAudioId(),subInfoList.get(0).subId);
}else
//end modify Music MultiSim
MusicUtils.setRingtone(this, mService.getAudioId());
}
return true;
}
//start modify Music MultiSim
case USE_AS_SIM1_RINGTONE: {
// Set the system setting to make this the current ringtone
if (mService != null) {
long subId=SubscriptionManager.getSubIdUsingSlotId(0)[0];
MusicLogUtils.d(TAG, "onOptionsItemSelected subId= " + subId);
MusicUtils.setRingtone(this, mService.getAudioId(),subId);
}
return true;
}
case USE_AS_SIM2_RINGTONE: {
// Set the system setting to make this the current ringtone
if (mService != null) {
long subId=SubscriptionManager.getSubIdUsingSlotId(1)[0];
MusicLogUtils.d(TAG, "onOptionsItemSelected subId= " + subId);
MusicUtils.setRingtone(this, mService.getAudioId(),subId);
}
return true;
}
//end modify Music MultiSim
// Set the system setting to make this the current ringtone
if (mService != null) {
//start modify Music MultiSim
if (SystemProperties.get("ro.mtk_multisim_ringtone").equals("1")){
List<SubInfoRecord> subInfoList = SubscriptionManager.getActiveSubInfoList();
MusicUtils.setRingtone(this, mService.getAudioId(),subInfoList.get(0).subId);
}else
//end modify Music MultiSim
MusicUtils.setRingtone(this, mService.getAudioId());
}
return true;
}
//start modify Music MultiSim
case USE_AS_SIM1_RINGTONE: {
// Set the system setting to make this the current ringtone
if (mService != null) {
long subId=SubscriptionManager.getSubIdUsingSlotId(0)[0];
MusicLogUtils.d(TAG, "onOptionsItemSelected subId= " + subId);
MusicUtils.setRingtone(this, mService.getAudioId(),subId);
}
return true;
}
case USE_AS_SIM2_RINGTONE: {
// Set the system setting to make this the current ringtone
if (mService != null) {
long subId=SubscriptionManager.getSubIdUsingSlotId(1)[0];
MusicLogUtils.d(TAG, "onOptionsItemSelected subId= " + subId);
MusicUtils.setRingtone(this, mService.getAudioId(),subId);
}
return true;
}
//end modify Music MultiSim
4,MusicUtils.java:
public static final String SUFFIX_RINGER_URI = "_ringtone";
1), 引入文件
public static final String SUFFIX_RINGER_URI = "_ringtone";
1), 引入文件
//start modify Music MultiSim
import android.telephony.TelephonyManager;
import com.mediatek.audioprofile.AudioProfileManager;
import android.os.SystemProperties;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import com.mediatek.audioprofile.AudioProfileManager;
import android.os.SystemProperties;
import android.telephony.SubscriptionManager;
//end modify Music MultiSim
2),添加USE_AS_SIM1_RINGTONE/USE_AS_SIM2_RINGTONE的定义,并修改CHILD_MENU_BASE:
public interface Defs {
....
/// M: add for drm
public final static int DRM_INFO = 15;
//start modify Music MultiSim
public final static int USE_AS_SIM1_RINGTONE = 16;
public final static int USE_AS_SIM2_RINGTONE = 17;
public final static int CHILD_MENU_BASE = 18; // this should be the last item
// public final static int CHILD_MENU_BASE = 16; // this should be the last item
//end modify Music MultiSim
public interface Defs {
....
/// M: add for drm
public final static int DRM_INFO = 15;
//start modify Music MultiSim
public final static int USE_AS_SIM1_RINGTONE = 16;
public final static int USE_AS_SIM2_RINGTONE = 17;
public final static int CHILD_MENU_BASE = 18; // this should be the last item
// public final static int CHILD_MENU_BASE = 16; // this should be the last item
//end modify Music MultiSim
3)修改setRingtone(),参数中增加slotId
static void setRingtone(Context context, long id, int slotId /* modify Music MultiSim */) {
ContentResolver resolver = context.getContentResolver();
// Set the flag in the database to mark this as a ringtone
Uri ringUri = ContentUris.withAppendedId(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, id);
try {
ContentValues values = new ContentValues(2);
values.put(MediaStore.Audio.Media.IS_RINGTONE, "1");
values.put(MediaStore.Audio.Media.IS_ALARM, "1");
resolver.update(ringUri, values, null, null);
} catch (UnsupportedOperationException ex) {
// most likely the card just got unmounted
MusicLogUtils.e(TAG, "couldn't set ringtone flag for id " + id);
return;
}
static void setRingtone(Context context, long id, int slotId /* modify Music MultiSim */) {
ContentResolver resolver = context.getContentResolver();
// Set the flag in the database to mark this as a ringtone
Uri ringUri = ContentUris.withAppendedId(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, id);
try {
ContentValues values = new ContentValues(2);
values.put(MediaStore.Audio.Media.IS_RINGTONE, "1");
values.put(MediaStore.Audio.Media.IS_ALARM, "1");
resolver.update(ringUri, values, null, null);
} catch (UnsupportedOperationException ex) {
// most likely the card just got unmounted
MusicLogUtils.e(TAG, "couldn't set ringtone flag for id " + id);
return;
}
String[] cols = new String[] {
MediaStore.Audio.Media._ID,
MediaStore.Audio.Media.DATA,
MediaStore.Audio.Media.TITLE
};
/// M: use selectionArgs replace set query value in where @{
String where = MediaStore.Audio.Media._ID + "=?";
String[] whereArgs = new String[]{String.valueOf(id)};
Cursor cursor = query(context, MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
cols, where , whereArgs, null);
/// @}
try {
if (cursor != null && cursor.getCount() == 1) {
// Set the system setting to make this the current ringtone
cursor.moveToFirst();
//start modify Music MultiSim
if(SystemProperties.get("ro.mtk_multisim_ringtone").equals("1")){
AudioProfileManager mProfileManager = (AudioProfileManager) context.getSystemService(Context.AUDIO_PROFILE_SERVICE);
String mActiveProfileKey = mProfileManager.getActiveProfileKey();
final TelephonyManager mTeleManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
if(slotId == -1){
Settings.System.putString(resolver, Settings.System.RINGTONE, ringUri.toString());
MusicLogUtils.d(TAG, "setRingtone: " + "slotId is null" + ", ringUri= "+ringUri);
}else {
MusicLogUtils.d(TAG, "setRingtone: " + "slotId = " + slotId + ", ringUri= "+ringUri);
mProfileManager.setRingtoneUri(mActiveProfileKey, AudioProfileManager.TYPE_RINGTONE, slotId, ringUri);
}
}else
//end modify Music MultiSim
Settings.System.putString(resolver, Settings.System.RINGTONE, ringUri.toString());
String message = context.getString(R.string.ringtone_set, cursor.getString(2));
Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
}
} finally {
if (cursor != null) {
cursor.close();
}
}
MediaStore.Audio.Media._ID,
MediaStore.Audio.Media.DATA,
MediaStore.Audio.Media.TITLE
};
/// M: use selectionArgs replace set query value in where @{
String where = MediaStore.Audio.Media._ID + "=?";
String[] whereArgs = new String[]{String.valueOf(id)};
Cursor cursor = query(context, MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
cols, where , whereArgs, null);
/// @}
try {
if (cursor != null && cursor.getCount() == 1) {
// Set the system setting to make this the current ringtone
cursor.moveToFirst();
//start modify Music MultiSim
if(SystemProperties.get("ro.mtk_multisim_ringtone").equals("1")){
AudioProfileManager mProfileManager = (AudioProfileManager) context.getSystemService(Context.AUDIO_PROFILE_SERVICE);
String mActiveProfileKey = mProfileManager.getActiveProfileKey();
final TelephonyManager mTeleManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
if(slotId == -1){
Settings.System.putString(resolver, Settings.System.RINGTONE, ringUri.toString());
MusicLogUtils.d(TAG, "setRingtone: " + "slotId is null" + ", ringUri= "+ringUri);
}else {
MusicLogUtils.d(TAG, "setRingtone: " + "slotId = " + slotId + ", ringUri= "+ringUri);
mProfileManager.setRingtoneUri(mActiveProfileKey, AudioProfileManager.TYPE_RINGTONE, slotId, ringUri);
}
}else
//end modify Music MultiSim
Settings.System.putString(resolver, Settings.System.RINGTONE, ringUri.toString());
String message = context.getString(R.string.ringtone_set, cursor.getString(2));
Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
}
} finally {
if (cursor != null) {
cursor.close();
}
}
}
3)原来的setRingtone(Context context, long id)改成调用 setRingtone(Context context, long id, int slotID),但是slotId为-1:
static void setRingtone(Context context, long id) {
setRingtone(context, id,-1);
}
static void setRingtone(Context context, long id) {
setRingtone(context, id,-1);
}
注:
L1版本与L0版本某些接口有点小小的区别,需要修改如下:
MediaPlaybackActivity.java 中:
1. 删掉 import android.telephony.SubInfoRecord;
2. 将 List<SubInfoRecord> subInfoList = SubscriptionManager.getActiveSubInfoList(); MusicUtils.setRingtone(this, mService.getAudioId(),subInfoList.get(0).subId);
改为:
int[] mSubIdList = SubscriptionManager.from(this).getActiveSubscriptionIdList();
MusicUtils.setRingtone(this, mService.getAudioId(),mSubIdList[0];
3. 将getSubIdUsingSlotId()
改用: getSubId()
4. 将getActiveSubInfoCount 改为 getActiveSubscriptionInfoCount()。
上面的差别都是在frameworks/base/telephony/java/android/telephony/SubscriptionManager.java 文件里,可能不同版本接口不太一样。
0 0
- [Audio Profile]L版本上music如何设置双卡铃声
- [FAQ13736][Audio Profile]L版本上music如何设置双卡铃声
- [FAQ10001][Audio Profile]打开双卡铃声设置功能后,设置卡1,卡2的铃声之后,将两张卡交换卡槽,铃声也会交换
- mt6735 【Audio Profile】如何分别配置视频铃声的卡1卡2默认铃声
- android Music 中如何添加设置双卡铃声的菜单
- android Music 中如何添加设置双卡铃声的菜单
- [FAQ09288][Audio Profile]如何分别配置卡1卡2的默认铃声
- mt6735 [Audio Profile]情景模式中设置来电铃声,添加“无”选项之后不能保存状态
- [FAQ15257][Audio App]如何在通知栏上显示 music 播放/暂停 的控件
- Audio & Music
- [FAQ20158]N版本双卡铃声
- 魅族M9如何设置铃声
- 苹果手机如何设置铃声
- Android MTK N 平台上如何添加双卡铃声功能
- 【Multi-user】如何在L版本上打开Multi-user
- android系统精简掉music.apk后设置铃声的方法
- android_N上关机闹钟铃声问题_设置的铃声和播放的铃声不一样
- 如何在iPhone5上更换铃声
- jdk版本问题(Unsupported major.minor version 52.0)
- vector和list区别
- Ubuntu 16.04 + GTX970 + cuda8.0.44安装配置等问题
- python tarfile
- Spark性能优化:数据倾斜调优
- [Audio Profile]L版本上music如何设置双卡铃声
- 【SSH网上商城项目实战02】基本增删查改、Service和Action的抽取以及使用注解替换xml
- Red Hat Enterprise Linux 7 root账号自动登陆
- Address already in use: JVM_Bind错误的解决
- RollNum ,滚动数字
- IMF spark 正则表达式 统计apache log 日志
- 你可能漏掉的知识点: onResumeFragments
- 恢复系统强制卸载MSDE
- Service入门(二)——bindService、unbindService