Android N 版本双卡铃声

1. 双卡铃声功能

17年做的第一个功能,原因是因为mtk在7.0移除了audioprofile所以没有了双卡铃声,主要思路是在原来单卡的基础上再添加一个存储铃声的标记。来电根据sim卡id之类的来判断卡一卡二,播放对应的铃声。

主要代码

alps\build\target\product\full_base.mk

PRODUCT_PROPERTY_OVERRIDES:= \

ro.config.ringtone=Ring_Synth_04.ogg \

ro.config.notification_sound=pixiedust.ogg\

ro.config.ringtone_sim2=Ring_Synth_04.ogg

 

alps\frameworks\base\core\java\android\provider\Settings.java

public staticfinal Uri DEFAULT_RINGTONE_URI = getUriFor(RINGTONE);

//add by illa start

publicstatic final String RINGTONE_SIM2 = "ringtone_sim2";

public static final UriDEFAULT_RINGTONE_SIM2_URI = getUriFor(RINGTONE_SIM2);

publicstatic final String RINGTONE_CACHESIM = "ringtonesim_cache";

public static final Uri RINGTONE_CACHESIM_URI= getUriFor(RINGTONE_CACHESIM);

//add by illa end

/**{@hide} */

public static final String RINGTONE_CACHE ="ringtone_cache";

 

 

alps\frameworks\base\media\java\android\media\MediaScanner.java

 

 

private static final StringDEFAULT_RINGTONE_PROPERTY_PREFIX = "ro.config.";

//add by illa start

private StringmDefaultRingtoneSim2Filename;

private booleanmDefaultRingtoneSim2Set;

private static finalString RINGTONE_SIM2_SET = "ringtone_sim2_set";

//add by illa end

private final BitmapFactory.OptionsmBitmapOptions = new BitmapFactory.Options();

 

private void setDefaultRingtoneFileNames() {

         …

       mDefaultAlarmAlertFilename =SystemProperties.get(DEFAULT_RINGTONE_PROPERTY_PREFIX

                + Settings.System.ALARM_ALERT);

//add by illa start

mDefaultRingtoneSim2Filename =SystemProperties.get(DEFAULT_RINGTONE_PROPERTY_PREFIX

                +Settings.System.RINGTONE_SIM2);

//add by illa end   

     …

 

}

 

public UridoScanFile(String path, String mimeType, long lastModified,

                long fileSize, booleanisDirectory, boolean scanAlways, boolean noMedia) {  

         …

doesPathHaveFilename(entry.mPath,mDefaultRingtoneFilename))

//add by illa start

||(!mDefaultRingtoneSim2Set &&

doesPathHaveFilename(entry.mPath,"mDefaultRingtoneSim2Filename")

//add by illa end

|| (!mDefaultAlarmSet &&

doesPathHaveFilename(entry.mPath,mDefaultAlarmAlertFilename)))) {

}

private Uri endFile(FileEntry entry,boolean ringtones, boolean notifications,

                boolean alarms, boolean music,boolean podcasts){

// update database

                            boolean isSim2Ringtone = false;      //add byilla 

 

//add by illa start

                } else if (ringtones &&((mWasEmptyPriorToScan &&(!mDefaultRingtoneSet||!mDefaultRingtoneSim2Set)) ||

                       doesSettingEmpty(RINGTONE_SET)||doesSettingEmpty(RINGTONE_SIM2_SET))) {

                                     if(TextUtils.isEmpty(mDefaultRingtoneFilename) ||

                       doesPathHaveFilename(entry.mPath, mDefaultRingtoneFilename)) {

                    needToSetSettings = true;

                    /// M: Adds log to debugsetting ringtones.

                                               if (DEBUG) {

                    Log.v(TAG,"endFile111: needToSetRingtone=true.");

                                               }

                } elseif(TextUtils.isEmpty(mDefaultRingtoneSim2Filename) ||

                       doesPathHaveFilename(entry.mPath,"mDefaultRingtoneSim2Filename")) {

                    needToSetSettings = true;

                    isSim2Ringtone = true;

                    Log.v(TAG,"endFile22222: needToSetRingtone=true.sim2 default ringtone");

                }

                     //addby illa end

            } else if (alarms &&((mWasEmptyPriorToScan && !mDefaultAlarmSet) ||

         …

}

…..

} else if (ringtones &&(doesSettingEmpty(RINGTONE_SET)||doesSettingEmpty(RINGTONE_SIM2_SET))) {

                if (!isSim2Ringtone) {

                   setSettingIfNotSet(Settings.System.RINGTONE, tableUri, rowId);

                                               if(mDefaultRingtoneSim2Filename.equals(mDefaultRingtoneFilename)){

                                                        setSettingIfNotSet(Settings.System.RINGTONE_SIM2,tableUri, rowId);

                                               }

                    mDefaultRingtoneSet = true;

                    setSettingFlag(RINGTONE_SET);

                    Log.v(TAG, "endFile:set 1111ringtone. uri=" + tableUri + ", rowId=" + rowId);

                } else {

                   setSettingIfNotSet(Settings.System.RINGTONE_SIM2, tableUri, rowId);

                    //setProfileSettings(RingtoneManager.TYPE_RINGTONE_SIM2,tableUri, rowId);

                    mDefaultRingtoneSim2Set =true;

                   setSettingFlag(RINGTONE_SIM2_SET);

                    Log.v(TAG, "endFile:set22222 sim2 ringtone. uri=" + tableUri + ", rowId=" + rowId);

                }

                       //add by illa end

           }else if (alarms && doesSettingEmpty(ALARM_SET)) {

…..

private void prescan(String filePath,boolean prescanFiles) throws RemoteException {

…..

mDefaultAlarmSet =wasRingtoneAlreadySet(Settings.System.ALARM_ALERT);

                   mDefaultRingtoneSim2Set= wasRingtoneAlreadySet(Settings.System.RINGTONE_SIM2);//add byilla 

….

alps\frameworks\base\media\java\android\media\RingtoneManager.java

   public static final int TYPE_RINGTONE = 1;

         //addby illa start

         publicstatic final int TYPE_RINGTONE_SIM2 = 32;

        

         publicstatic final String KEY_DEFAULT_RINGTONE_SIM2 ="mtk_audioprofile_default_ringtone_sim2";

//add by illa end

….

    private static String getSettingForType(inttype) {

        if ((type & TYPE_RINGTONE) != 0) {

            return Settings.System.RINGTONE;

        } else if ((type &TYPE_RINGTONE_SIM2) != 0) {//add by illa 

            returnSettings.System.RINGTONE_SIM2;

        } else if ((type & TYPE_NOTIFICATION)!= 0) {

            returnSettings.System.NOTIFICATION_SOUND;

        } else if ((type & TYPE_ALARM) !=0) {

            return Settings.System.ALARM_ALERT;

        } else {

            return null;

        }

    }

    /** {@hide} */

    public static Uri getCacheForType(int type){

        if ((type & TYPE_RINGTONE) != 0) {

            returnSettings.System.RINGTONE_CACHE_URI;

        } else if ((type &TYPE_RINGTONE_SIM2) != 0) {//add by illa 

            returnSettings.System.RINGTONE_CACHESIM_URI;

        }else if ((type &TYPE_NOTIFICATION) != 0) {

            returnSettings.System.NOTIFICATION_SOUND_CACHE_URI;

        } else if ((type & TYPE_ALARM) !=0) {

            returnSettings.System.ALARM_ALERT_CACHE_URI;

        } else {

            return null;

        }

    }

    public static int getDefaultType(UridefaultRingtoneUri) {

        if (defaultRingtoneUri == null) {

            return -1;

        } else if(defaultRingtoneUri.equals(Settings.System.DEFAULT_RINGTONE_URI)) {

            return TYPE_RINGTONE;

        } else if(defaultRingtoneUri.equals(Settings.System.DEFAULT_RINGTONE_SIM2_URI)) {//addbyilla 

            return TYPE_RINGTONE_SIM2;

        } 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;

        } else {

            return -1;

        }

    }

    /**

     * Returns the {@link Uri} for the defaultringtone of a particular type.

     * Rather than returning the actualringtone's sound {@link Uri}, this will

     * return the symbolic {@link Uri} whichwill resolved to the actual sound

     * when played.

     *

     * @param type The ringtone type whosedefault should be returned.

     * @return The {@link Uri} of the defaultringtone for the given type.

     */

    public static Uri getDefaultUri(int type) {

        if ((type & TYPE_RINGTONE) != 0) {

            return Settings.System.DEFAULT_RINGTONE_URI;

        } if ((type & TYPE_RINGTONE_SIM2)!= 0) {//add by illa 

            returnSettings.System.DEFAULT_RINGTONE_SIM2_URI;

        }else if ((type &TYPE_NOTIFICATION) != 0) {

            returnSettings.System.DEFAULT_NOTIFICATION_URI;

        } else if ((type & TYPE_ALARM) !=0) {

            returnSettings.System.DEFAULT_ALARM_ALERT_URI;

        } else {

            return null;

        }

    }

alps\packages\services\Telecomm\src\com\android\server\telecom\RingtoneFactory.java

   public Ringtone getRingtone(Call incomingCall) {

       // Use the default ringtone of the work profile if the contact is a workprofile contact.

       Context userContext = isWorkContact(incomingCall) ?

                getWorkProfileContextForUser(mCallsManager.getCurrentUserHandle()):

               getContextForUserHandle(mCallsManager.getCurrentUserHandle());

       Uri ringtoneUri = incomingCall.getRingtone();

       Ringtone ringtone = null;

       if(ringtoneUri != null && userContext != null) {

           // Ringtone URI is explicitly specified. First, try to create a Ringtonewith 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.

                            if(incomingCall.getSubId()== SubscriptionManager.getSubId(1)[0]){

           ringtone = RingtoneManager.getRingtone(

                    hasDefaultRingtoneForUser(userContext)? userContext : mContext,

                   Settings.System.DEFAULT_RINGTONE_SIM2_URI);

                            }else{

                            ringtone= RingtoneManager.getRingtone(

                   hasDefaultRingtoneForUser(userContext) ? userContext : mContext,

                   Settings.System.DEFAULT_RINGTONE_URI);

                            }                

       }

       if (ringtone != null) {

           ringtone.setStreamType(AudioManager.STREAM_RING);

       }

       return ringtone;

}

设置sim2的时候

Settings.System.putString(resolver, Settings.System.RINGTONE_SIM2, ringUri.toString());

保存在这里就可以

packages\apps\PhoneCommon\src\com\android\phone\common\util\SettingsUtil.java

public staticvoid updateRingtoneName(

            Context context, Handler handler,int type, String key, int msg) {

        final Uri ringtoneUri;

        boolean defaultRingtone = false;

        if (type ==RingtoneManager.TYPE_RINGTONE || type ==RingtoneManager.TYPE_RINGTONE_SIM2/*add byilla */) {

            // For ringtones, we can justlookup the system default because changing the settings

            // in Call Settings changes thesystem default.

            ringtoneUri =RingtoneManager.getActualDefaultRingtoneUri(context, type);

        }

这没什么难度



猜你喜欢

转载自blog.csdn.net/illailla/article/details/79242636
今日推荐