Android系统双卡铃声实现

根据我们之前的流程梳理,我们了解了铃声的播放,铃声的设置。今天我们就来详细讲解双卡铃声的实现。

一、配置双卡铃声

我们首先需要在配置文件中添加SIM卡二的配置

路径:platform/build/target/product/full_base.mk

# Additional settings used in all AOSP builds
PRODUCT_PROPERTY_OVERRIDES := \
    ro.config.ringtone=Ring_Synth_04.ogg \
    ro.config.ringtone_2=Ring_Synth_04.ogg \
    ro.config.notification_sound=pixiedust.ogg

二、FrameWork配置

我们需要添加一些标志位和路径信息

路径:/frameworks/base/core/java/android/provider/Settings.java

       //add by xiangzaixiansheng for support dual sim card ringtones
        /**
         * Persistent store for the SIM-2 rigntone url
         * Persistent store for the SIM-2 ringtone URI.
         * <p>
         * If you need to play SIM-2 ringtone at any given time, it is recommended
         * you give {@link #DEFAULT_RINGTONE_URI_2} to the media player.  It will resolve
         * to the set default ringtone at the time of playing.
         *
         * @see #DEFAULT_RINGTONE_URI_2
         * @hide
       */
        public static final String RINGTONE_2 = "ringtone_2";
        private static final Validator RINGTONE_2_VALIDATOR = sUriValidator;

。。。。。

       //add by xiangzaixiansheng for support dual sim card ringtones  @{
        /**
         * Definite to the current sim-2 rigntone
         * A {@link Uri} that will point to the current SIM-2 ringtone at any
         * given time.
         * <p>
         * If the current default ringtone is in the DRM provider and the caller
         * does not have permission, the exception will be a
         * FileNotFoundException.
         *
         * @hide
         */
        public static final Uri DEFAULT_RINGTONE_URI_2 = getUriFor(RINGTONE_2);

。。。。。

        //add by xiangzaixiansheng for support dual sim card ringtones  @{
        /** {@hide} */
        public static final String RINGTONE_CACHE_2 = "ringtone_cache_2";
        /** {@hide} */
        public static final Uri RINGTONE_CACHE_URI_2 = getUriFor(RINGTONE_CACHE_2);
        //add by xiangzaixiansheng  for support dual sim card ringtones  @}


。。。。。
 public static final String[] SETTINGS_TO_BACKUP = {
            。。。。
            LOCKSCREEN_SOUNDS_ENABLED,
            SHOW_WEB_SUGGESTIONS,
            SIP_CALL_OPTIONS,
            SIP_RECEIVE_CALLS,
            POINTER_SPEED,
            VIBRATE_WHEN_RINGING,
            RINGTONE,
            //add by xiangzaixiansheng for support dual sim card ringtones  @{
            RINGTONE_2,
            //MMS_NOTIFICATION_SOUND,
            //add by xiangzaixiansheng for support dual sim card ringtones  @}
            LOCK_TO_APP_ENABLED,
。。。。。。
        };

。。。。。。
 public static final Set<String> PUBLIC_SETTINGS = new ArraySet<>();
        static {
            。。。。。。
            PUBLIC_SETTINGS.add(SHOW_WEB_SUGGESTIONS);
            PUBLIC_SETTINGS.add(VIBRATE_WHEN_RINGING);

            /// M: Add MTK settings to PUBLIC group @{
            putMtkSettingsToSet(className, "putInPublicSettings", Set.class, PUBLIC_SETTINGS);
            /// @}
             //add by xiangzaixiansheng for support dual sim card ringtones  @{
             PUBLIC_SETTINGS.add(RINGTONE_2);
            //add by xiangzaixiansheng for support dual sim card ringtones  @}
        }

。。。。。
        public static final Map<String, Validator> VALIDATORS = new ArrayMap<>();
        static {
            VALIDATORS.put(END_BUTTON_BEHAVIOR,END_BUTTON_BEHAVIOR_VALIDATOR);
            。。。。。。。。。
            VALIDATORS.put(WIFI_STATIC_DNS2, WIFI_STATIC_DNS2_VALIDATOR);
            VALIDATORS.put(SHOW_BATTERY_PERCENT, SHOW_BATTERY_PERCENT_VALIDATOR);
            //add by xiangzaixiansheng for support dual sim card ringtones @{
            VALIDATORS.put(RINGTONE_2, RINGTONE_2_VALIDATOR);
            //VALIDATORS.put(MMS_NOTIFICATION_SOUND, MMS_NOTIFICATION_SOUND_VALIDATOR);
            //add by xiangzaixiansheng for support dual sim card ringtones  @}
        }

路径:/frameworks/base/media/java/android/media/MediaScanner.java

    //导包
    import android.telephony.TelephonyManager;

    
    //add by xiangzaixiansheng for support dual sim card ringtones @{
    /** Whether the scanner has set a default sound for the ringer ringtone 2. */
    private boolean mDefaultRingtone2Set;
    //add by xiangzaixiansheng for support dual sim card ringtones @}
    
    
    //add by xiangzaixiansheng for support dual sim card ringtones  @{
    /** The filename for the default sound for the ringer ringtone 2. */
    
    private String mDefaultRingtone2Filename;
    //add by xiangzaixiansheng for support dual sim card ringtones  @}


    private void setDefaultRingtoneFileNames() {
        mDefaultRingtoneFilename = SystemProperties.get(DEFAULT_RINGTONE_PROPERTY_PREFIX
                + Settings.System.RINGTONE);
        //add by xiangzaixiansheng for support dual sim card ringtones @{
        mDefaultRingtone2Filename = SystemProperties.get(DEFAULT_RINGTONE_PROPERTY_PREFIX
                + Settings.System.RINGTONE_2);
        //add by xiangzaixiansheng for support dual sim card ringtones  @}
        mDefaultNotificationFilename = SystemProperties.get(DEFAULT_RINGTONE_PROPERTY_PREFIX
                + Settings.System.NOTIFICATION_SOUND);
        mDefaultAlarmAlertFilename = SystemProperties.get(DEFAULT_RINGTONE_PROPERTY_PREFIX
                + Settings.System.ALARM_ALERT);
    }


 public Uri doScanFile(String path, String mimeType, long lastModified,
                long fileSize, boolean isDirectory, boolean scanAlways, boolean noMedia) {
            Uri result = null;
//            long t1 = System.currentTimeMillis();
            try {
                FileEntry entry = beginFile(path, mimeType, lastModified,
                        fileSize, isDirectory, noMedia);

                if (entry == null) {
                    return null;
                }

                // if this file was just inserted via mtp, set the rowid to zero
                // (even though it already exists in the database), to trigger
                // the correct code path for updating its entry
                if (mMtpObjectHandle != 0) {
                    entry.mRowId = 0;
                }

                if (entry.mPath != null) {
                    if (((!mDefaultNotificationSet &&
                                doesPathHaveFilename(entry.mPath, mDefaultNotificationFilename))
                        || (!mDefaultRingtoneSet &&
                                doesPathHaveFilename(entry.mPath, mDefaultRingtoneFilename))
                        //add by xiangzaixiansheng for support dual sim card ringtones  @{
                        || (!mDefaultRingtone2Set&&
                                doesPathHaveFilename(entry.mPath, mDefaultRingtone2Filename))
                        //|| (!mDefaultMmsNotificationSet&&
                        //       doesPathHaveFilename(entry.mPath, mDefaultMmsNotificationFilename))
                        //add by xiangzaixiansheng for support dual sim card ringtones ZAL1680G-844 @}
                        || (!mDefaultAlarmSet &&
                                doesPathHaveFilename(entry.mPath, mDefaultAlarmAlertFilename)))) {
                        Log.w(TAG, "forcing rescan of " + entry.mPath +
                                "since ringtone setting didn't finish");
                        scanAlways = true;
                    } else if (isSystemSoundWithMetadata(entry.mPath)
}

............
 private Uri endFile(FileEntry entry, boolean ringtones, boolean notifications,
                boolean alarms, boolean music, boolean podcasts)
                throws RemoteException {

   boolean needToSetSettings = false;
            //add by xiangzaixiansheng for support dual sim card ringtones  @{
            boolean needToSetRingtoneSettings = false;
            boolean needToSetRingtone2Settings = false;
            //boolean needToSetMmsNotification = false;
            boolean needToSetDefaultNotification = false;
            //add by xiangzaixiansheng for support dual sim card ringtones  @}
            
            // Setting a flag in order not to use bulk insert for the file related with
            // notifications, ringtones, and alarms, because the rowId of the inserted file is
            // needed.
            //add by xiangzaixiansheng for support dual sim card ringtones  @{
            if (notifications && !mDefaultNotificationSet) {
                if (!mDefaultNotificationSet && (TextUtils.isEmpty(mDefaultNotificationFilename) ||
                    doesPathHaveFilename(entry.mPath, mDefaultNotificationFilename))) {
                    needToSetSettings = true;
                    needToSetDefaultNotification = true;
                }

              //  if ((TextUtils.isEmpty(mDefaultMmsNotificationFilename) ||
              //      doesPathHaveFilename(entry.mPath, mDefaultMmsNotificationFilename))) {
              //     needToSetSettings = true;
              //      needToSetMmsNotification = true;
              //  }
            } else if (ringtones && (!mDefaultRingtoneSet || !mDefaultRingtone2Set)) {
                if (!mDefaultRingtoneSet && (TextUtils.isEmpty(mDefaultRingtoneFilename) ||
                    doesPathHaveFilename(entry.mPath, mDefaultRingtoneFilename))) {
                    needToSetSettings = true;
                    needToSetRingtoneSettings = true;
                }

               if (!mDefaultRingtone2Set && (TextUtils.isEmpty(mDefaultRingtone2Filename) ||
                   doesPathHaveFilename(entry.mPath, mDefaultRingtone2Filename))) {
                   needToSetSettings = true;
                   needToSetRingtone2Settings = true;
             //add by xiangzaixiansheng for support dual sim card ringtones @}

                }
            } else if (alarms && !mDefaultAlarmSet) {
                if (TextUtils.isEmpty(mDefaultAlarmAlertFilename) ||
                        doesPathHaveFilename(entry.mPath, mDefaultAlarmAlertFilename)) {
                    needToSetSettings = true;
                }
            }
..............
if(needToSetSettings) {
                if (notifications) {
                   //add by xiangzaixiansheng for support dual sim card ringtones  @{
                    if(needToSetDefaultNotification){
                        setRingtoneIfNotSet(Settings.System.NOTIFICATION_SOUND, tableUri, rowId);
                        mDefaultNotificationSet = true;
                    }

                  // if(needToSetMmsNotification){
                  //     setRingtoneIfNotSet(Settings.System.MMS_NOTIFICATION_SOUND, tableUri, rowId);
                  //      mDefaultMmsNotificationSet = true;
                  //  }

                } else if (ringtones) {
                    // memorize default system ringtone persistently
                    //setRingtoneIfNotSet(Settings.System.DEFAULT_RINGTONE, tableUri, rowId);
                    if (needToSetRingtoneSettings) {
                        setRingtoneIfNotSet(Settings.System.RINGTONE, tableUri, rowId);
                        mDefaultRingtoneSet = true;
                    }
                    if (TelephonyManager.getDefault().isMultiSimEnabled()) {
                        if (needToSetRingtone2Settings){
                            setRingtoneIfNotSet(Settings.System.RINGTONE_2, tableUri, rowId);
                            mDefaultRingtone2Set = true;
                        }
                    }
               //add by xiangzaixiansheng for support dual sim card ringtones  @}


........................
}

........................
  private void prescan(String filePath, boolean prescanFiles) throws RemoteException {
........
         mDefaultRingtone2Set= wasRingtoneAlreadySet(Settings.System.RINGTONE_2);
........
 }

路径:/frameworks/base/media/java/android/media/RingtoneManager.java

    //add by xiangzaixiansheng for support dual sim card ringtones  @{
    /**
     * Type that refers to sounds that are used for mms notifications.
     * Note: This constant value is only for internal usage and
     * can't be added to TYPE_ALL.
     *
     * @hide
    */
     // public static final int TYPE_MMS_NOTIFICATION = 16;
     public static final int TYPE_RINGTONE_2 = 32;
     //add by xiangzaixiansheng for support dual sim card ringtones @}


 private void setFilterColumnsList(int type) {
        List<String> columns = mFilterColumns;
        columns.clear();
        
        if ((type & TYPE_RINGTONE) != 0) {
            columns.add(MediaStore.Audio.AudioColumns.IS_RINGTONE);
        }
        //add by xiangzaixiahsheng for support dual sim card ringtones  @{
         if ((type & TYPE_RINGTONE_2) != 0) {
            columns.add(MediaStore.Audio.AudioColumns.IS_RINGTONE);
        }
        
        //add by xiangzaixiansheng for support dual sim card ringtones  @}
        if ((type & TYPE_NOTIFICATION) != 0) {
            columns.add(MediaStore.Audio.AudioColumns.IS_NOTIFICATION);
        }
        
        if ((type & TYPE_ALARM) != 0) {
            columns.add(MediaStore.Audio.AudioColumns.IS_ALARM);
        }
    }

  private static String getSettingForType(int type) {
        if ((type & TYPE_RINGTONE) != 0) {
            return Settings.System.RINGTONE;
        } else if ((type & TYPE_NOTIFICATION) != 0) {
            return Settings.System.NOTIFICATION_SOUND;
        } else if ((type & TYPE_ALARM) != 0) {
            return Settings.System.ALARM_ALERT;
        //add by xiangzaixiansheng for support dual sim card ringtones  @{
        // } else if ((type & TYPE_MMS_NOTIFICATION) != 0) {
        //    return Settings.System.MMS_NOTIFICATION_SOUND;
        }else if ((type & TYPE_RINGTONE_2) != 0) {
            return Settings.System.RINGTONE_2;
       //add by xiangzaixiansheng for support dual sim card ringtones  @}
        } else {
            return null;
        }
    }


  public static Uri getCacheForType(int type, int userId) {
        if ((type & TYPE_RINGTONE) != 0) {
            return ContentProvider.maybeAddUserId(Settings.System.RINGTONE_CACHE_URI, userId);
        } else if ((type & TYPE_NOTIFICATION) != 0) {
            return ContentProvider.maybeAddUserId(Settings.System.NOTIFICATION_SOUND_CACHE_URI,
                    userId);
        } else if ((type & TYPE_ALARM) != 0) {
            return ContentProvider.maybeAddUserId(Settings.System.ALARM_ALERT_CACHE_URI, userId);
        }    
        //add by xiangzaixainsheng for support dual sim card ringtones  @{
        else if ((type & TYPE_RINGTONE_2) != 0) {
            return ContentProvider.maybeAddUserId(Settings.System.RINGTONE_CACHE_URI_2, userId);
        //}else if ((type & TYPE_MMS_NOTIFICATION) != 0) {
        //    return ContentProvider.maybeAddUserId(Settings.System.MMS_NOTIFICATION_SOUND_CACHE_URI, userId);
        //add by xiangzaixiansheng for support dual sim card ringtones  @}
        }
        return null;
    }



 public static int getDefaultType(Uri defaultRingtoneUri) {
        defaultRingtoneUri = ContentProvider.getUriWithoutUserId(defaultRingtoneUri);
        if (defaultRingtoneUri == null) {
            return -1;
        } else if (defaultRingtoneUri.equals(Settings.System.DEFAULT_RINGTONE_URI)) {
            return TYPE_RINGTONE;
        } else if (defaultRingtoneUri.equals(Settings.System.DEFAULT_NOTIFICATION_URI)) {
            return TYPE_NOTIFICATION;
        } else if (defaultRingtoneUri.equals(Settings.System.DEFAULT_ALARM_ALERT_URI)) {
            return TYPE_ALARM;
        //add by xiangzaixiansheng for support dual sim card ringtones  @{
        } else if (defaultRingtoneUri.equals(Settings.System.DEFAULT_RINGTONE_URI_2)) {
            return TYPE_RINGTONE_2;
        //  }else if (defaultRingtoneUri.equals(Settings.System.DEFAULT_MMS_NOTIFICATION_SOUND_URI)) {
        //    return TYPE_MMS_NOTIFICATION;
        //add by xiangzaixiansheng for support dual sim card ringtones  @}
        } else {
            return -1;
        }
    }

 public static Uri getDefaultUri(int type) {
        if ((type & TYPE_RINGTONE) != 0) {
            return Settings.System.DEFAULT_RINGTONE_URI;
        } else if ((type & TYPE_NOTIFICATION) != 0) {
            return Settings.System.DEFAULT_NOTIFICATION_URI;
        } else if ((type & TYPE_ALARM) != 0) {
            return Settings.System.DEFAULT_ALARM_ALERT_URI;
        //add by xiangzaixiansheng for support dual sim card ringtones  @{
        } else if ((type & TYPE_RINGTONE_2) != 0) {
            return Settings.System.DEFAULT_RINGTONE_URI_2;
       // } else if ((type & TYPE_MMS_NOTIFICATION) != 0) {
       //     return Settings.System.DEFAULT_MMS_NOTIFICATION_SOUND_URI;
       //add by xiangzaixiansheng for support dual sim card ringtones  @}
        } else {
            return null;
        }
    }

    

路径:/frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java

 public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException {
       ..........
        final String cacheRingtoneSetting;
        final String cacheName;
        if (Settings.System.RINGTONE_CACHE_URI.equals(uri)) {
            cacheRingtoneSetting = Settings.System.RINGTONE;
            cacheName = Settings.System.RINGTONE_CACHE;
        } else if (Settings.System.NOTIFICATION_SOUND_CACHE_URI.equals(uri)) {
            cacheRingtoneSetting = Settings.System.NOTIFICATION_SOUND;
            cacheName = Settings.System.NOTIFICATION_SOUND_CACHE;
        } else if (Settings.System.ALARM_ALERT_CACHE_URI.equals(uri)) {
            cacheRingtoneSetting = Settings.System.ALARM_ALERT;
            cacheName = Settings.System.ALARM_ALERT_CACHE;
       //add by xiangzaixiansheng for support dual sim card ringtones  @{
        } else if (Settings.System.RINGTONE_CACHE_URI_2.equals(uri)) {
            cacheRingtoneSetting = Settings.System.RINGTONE_2;
            cacheName = Settings.System.RINGTONE_CACHE_2;
       //add by xiangzaixiansheng for support dual sim card ringtones @}
        } else {
            throw new FileNotFoundException("Direct file access no longer supported; "
                    + "ringtone playback is available through android.media.Ringtone");
        }
.........
}



 private boolean mutateSystemSetting(String name, String value, int runAsUserId,
            int operation) {
        .......
        // Invalidate any relevant cache files
        String cacheName = null;
        if (Settings.System.RINGTONE.equals(name)) {
            cacheName = Settings.System.RINGTONE_CACHE;
        } else if (Settings.System.NOTIFICATION_SOUND.equals(name)) {
            cacheName = Settings.System.NOTIFICATION_SOUND_CACHE;
        } else if (Settings.System.ALARM_ALERT.equals(name)) {
            cacheName = Settings.System.ALARM_ALERT_CACHE;
        //add by xiangzaixiansheng for support dual sim card ringtones  @{
        }else if (Settings.System.RINGTONE_2.equals(name)) {
            cacheName = Settings.System.RINGTONE_CACHE_2;
        // }else if (Settings.System.MMS_NOTIFICATION_SOUND.equals(name)) {
        //    cacheName = Settings.System.MMS_NOTIFICATION_SOUND_CACHE;
        //add by xiangzaixiansheng for support dual sim card ringtones  @}
        }
        if (cacheName != null) {
            final File cacheFile = new File(
                    getRingtoneCacheDir(owningUserId), cacheName);
            cacheFile.delete();
        }
}

路径:/frameworks/base/core/res/res/values/attrs.xml

 <!-- add by xiangzaixiansheng for support dual sim card ringtones -->
 <!-- Ringtones. -->
 <flag name="ringtone_2" value="32" />
<!-- add by xiangzaixiansheng for support dual sim card ringtones  -->

三、来电监听

这一步做的主要是区分 那个SIM卡来电,并播放相应铃声

路径:/vendor/mediatek/proprietary/packages/services/Telecomm/src/com/android/server/telecom/RingtoneFactory.java

import android.telecom.PhoneAccountHandle;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import com.android.internal.telephony.PhoneConstants;




 public Ringtone getRingtone(Call incomingCall) {
       ...........

        if(ringtoneUri != null && userContext != null) {
            // Ringtone URI is explicitly specified. First, try to create a Ringtone with that.
            ringtone = RingtoneManager.getRingtone(userContext, ringtoneUri);
        }
        if(ringtone == null) {
            // Contact didn't specify ringtone or custom Ringtone creation failed. Get default
            // ringtone for user or profile.
            Context contextToUse = hasDefaultRingtoneForUser(userContext) ? userContext : mContext;
            Uri defaultRingtoneUri;
            if (UserManager.get(contextToUse).isUserUnlocked(contextToUse.getUserId())) {
                defaultRingtoneUri = RingtoneManager.getActualDefaultRingtoneUri(contextToUse,
                        RingtoneManager.TYPE_RINGTONE);
             //add by xiangzaixiansheng for support dual sim card ringtones  @{
                int slotId = getSlotId(mContext,incomingCall.getTargetPhoneAccount());
                if (slotId == PhoneConstants.SUB2) {
                    defaultRingtoneUri = RingtoneManager.getActualDefaultRingtoneUri(contextToUse,
                            RingtoneManager.TYPE_RINGTONE_2);
                }
             //add by xiangzaixiansheng for support dual sim card ringtones @}
            } else {
                defaultRingtoneUri = Settings.System.DEFAULT_RINGTONE_URI;
            }
.........
}


 private int getSlotId(Context context, PhoneAccountHandle phoneAccountHandle) {
        int slotIndex = SubscriptionManager.INVALID_SIM_SLOT_INDEX;
        SubscriptionManager sm = SubscriptionManager.from(mContext);
        List<SubscriptionInfo> subInfoList = sm.getActiveSubscriptionInfoList();
        if (phoneAccountHandle != null && !TextUtils.isEmpty(phoneAccountHandle.getId())
            && subInfoList != null) {
            for (SubscriptionInfo subInfo : subInfoList) {
                if (phoneAccountHandle.getId().startsWith(subInfo.getIccId())) {
                    slotIndex = subInfo.getSimSlotIndex();
                }
            }
        }
        return slotIndex;
    }

四、Setting中的设置

这里面其实比较简单,只要模仿SIM卡1来添加就可以了

路径:/packages/apps/Settings/res/xml/sound_settings.xml

<com.android.settings.DefaultRingtonePreference
            android:key="ringtone2"
            android:title="@string/ringtone_title"
            android:dialogTitle="@string/ringtone_title"
            android:summary="@string/summary_placeholder"
            android:ringtoneType="ringtone_2" />

路径:/packages/apps/Settings/src/com/android/settings/notification/SoundSettings.java

 private static List<AbstractPreferenceController> buildPreferenceControllers(Context context,
            SoundSettings fragment, VolumeSeekBarPreference.Callback callback,
            Lifecycle lifecycle) {
        final List<AbstractPreferenceController> controllers = new ArrayList<>();
        controllers.add(new ZenModePreferenceController(context));
        controllers.add(new EmergencyBroadcastPreferenceController(
                context, KEY_CELL_BROADCAST_SETTINGS));
        controllers.add(new VibrateWhenRingPreferenceController(context));

        // === Volumes ===
        controllers.add(new AlarmVolumePreferenceController(context, callback, lifecycle));
        controllers.add(new MediaVolumePreferenceController(context, callback, lifecycle));
        controllers.add(
                new NotificationVolumePreferenceController(context, callback, lifecycle));
        controllers.add(new RingVolumePreferenceController(context, callback, lifecycle));

        // === Phone & notification ringtone ===
        controllers.add(new PhoneRingtonePreferenceController(context));
        //add by xiangzaixiansheng for support dual sim card ringtones  @{
        controllers.add(new PhoneRingtone2PreferenceController(context));
        //add by xiangzaixiansheng for support dual sim card ringtones  @}
        controllers.add(new AlarmRingtonePreferenceController(context));
        controllers.add(new NotificationRingtonePreferenceController(context));
......
}

路径:/packages/apps/Settings/src/com/android/settings/notification/PhoneRingtone2PreferenceController.java

package com.android.settings.notification;

import android.content.Context;
import android.media.RingtoneManager;

import com.android.settings.Utils;

public class PhoneRingtone2PreferenceController extends RingtonePreferenceControllerBase {

    private static final String KEY_PHONE_RINGTONE_2 = "ringtone2";
    String sim2 = "";

    public PhoneRingtone2PreferenceController(Context context) {
        super(context);
    }

    @Override
    public String getPreferenceKey() {
        return KEY_PHONE_RINGTONE_2;
    }

    @Override
    public boolean isAvailable() {
        if(simNumberCard == 0) {
          return false;
        } else if (simNumberCard ==1 ) {
          return isShowSim();
        } else if (simNumberCard == 2) {
          return Utils.isVoiceCapable(mContext);
        }       
          return Utils.isVoiceCapable(mContext);
    }
    
    public boolean isShowSim(){
      sim2=getSimName(1);
      if(sim2 !=  null && sim2 !="" && !sim2.equals("")) {
         return Utils.isVoiceCapable(mContext);
         } else {
         return false;
         }
    }

    @Override
    public int getRingtoneType() {
        return RingtoneManager.TYPE_RINGTONE_2;
    }
}

路径:/packages/apps/Settings/src/com/android/settings/notification/RingtonePreferenceControllerBase.java

这个里面需要配置的一些何时会显示SIM卡铃声选项显示的时机。例如我们的需求就是如果没有SIM卡2就不显示SIM卡2的铃声设置选项。这里面我们就忽略这些操作了。这里面就给出一个方法,如果获得当前卡槽的SIM卡信息。

   public  String getSimName(int phoneId) {
        mSubInfoList = mSubscriptionManager.getActiveSubscriptionInfoList();
        for (SubscriptionInfo info : mSubInfoList) {
            if (null != info && phoneId == info.getSimSlotIndex() &&
                    null != info.getDisplayName() && !"".equals(info.getDisplayName())) {
                return info.getDisplayName().toString();
            }
        }
        return "";
    }

 

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值