当前位置: 代码迷 >> 综合 >> android JB2版本FM中无RDS功能设置选项
  详细解决方案

android JB2版本FM中无RDS功能设置选项

热度:24   发布时间:2024-01-19 17:59:31.0
在JB2版本上没有RDS频道信息和频率切换设置选项,RDS频道信息和频率切换是默认开启的,即虽然没有相关菜单RDS相关信息都不会遗漏,这样也方便用户使用
部分客户一定要求添加,可按如下修改

1.修改FMRadioActivity.java中    private final ServiceConnection mServiceConnection = new ServiceConnection() {
        public void onServiceConnected(ComponentName className, IBinder service) {
。。。。
                powerUpFM();
之后添加如下:
    // Get RDS settings from database and set them into FM service.
    mIsPSRTEnabled = FMRadioStation.getRDSEnabled(mContext,
      FMRadioStation.RDS_SETTING_FREQ_PSRT);
    mIsAFEnabled = FMRadioStation.getRDSEnabled(mContext,
      FMRadioStation.RDS_SETTING_FREQ_AF);
    enablePSRT(mIsPSRTEnabled);
    enableAF(mIsAFEnabled);
2.在FMRadioActivity类中添加如下:
 public boolean mIsPSRTEnabled = false;
 public boolean mIsAFEnabled =false;
 
    private void enablePSRT(boolean enable) {
        if (null != mService) {
            mService.enablePSRT(enable);
        }
    }
    private void enableAF(boolean enable) {
        if (null != mService) {
            mService.enableAF(enable);
        }
    }
 void showRDSDialog(){
        boolean[] checkedItems = new boolean[2];
  
        CharSequence[] items = new CharSequence[2];
        items[0] = "RDS channel_information";
        items[1] = "RDS alternative_frequency";
        Context context = this.getApplicationContext();
        checkedItems[0] = FMRadioStation.getRDSEnabled(context,
                FMRadioStation.RDS_SETTING_FREQ_PSRT);
        checkedItems[1] = FMRadioStation.getRDSEnabled(context,
                FMRadioStation.RDS_SETTING_FREQ_AF);
  new AlertDialog.Builder(this)
      .setTitle(R.string.optmenu_rds_settings)
      .setMultiChoiceItems(items, checkedItems,
        new DialogInterface.OnMultiChoiceClickListener() {
         public void onClick(DialogInterface dialog, int which,
           boolean isChecked) {
          if (0 == which) {
           // RDS PS and RT
              mIsPSRTEnabled = isChecked;
              FMRadioStation.setRDSEnabled(mContext,
                FMRadioStation.RDS_SETTING_FREQ_PSRT,
                mIsPSRTEnabled);
              enablePSRT(mIsPSRTEnabled);
             } else if (1 == which) {
           // RDS AF
              mIsAFEnabled = isChecked;
              FMRadioStation.setRDSEnabled(mContext,
                FMRadioStation.RDS_SETTING_FREQ_AF,
                mIsAFEnabled);
              enableAF(mIsAFEnabled);
             }
         }
        })
      .setPositiveButton(R.string.btn_ok, null)
      .setCancelable(true)
      .create()
      .show();
 }
3.修改    public boolean onOptionsItemSelected(MenuItem item) 
中        case R.id.fm_menu:
在            boolean isPlaying = mService.isPowerUp();
之前添加:            menu.findItem(R.id.fm_RDS_setting).setEnabled(mService.isRDSSupported());

4.修改mediatek\packages\apps\FMRadio\res\menu\fm_menu.xml文件,
添加menu:
 <item android:id="@+id/fm_RDS_setting"
   android:title="RDS Setting"
   android:enabled="false"/>  
5.修改    public boolean onMenuItemClick(MenuItem item)
添加
  case R.id.fm_RDS_setting:
                                             showRDSDialog();
   break;
7.修改FMRadioService.java
添加:
    public void enablePSRT(boolean enable) {
        LogUtils.d(TAG, "FMRadioService.enablePSRT: " + enable);
        mIsPSRTEnabled = enable;
        if (!mIsPSRTEnabled) {
            // Clear PS and RT strings.
            setPS("");
            setLRText("");
        }
    }
/**
     * open or close AF function
     * @param enable true, open; false, close.
     */
    public void enableAF(boolean enable) {
        LogUtils.d(TAG, "FMRadioService.enableAF: " + enable);
        mIsAFEnabled = enable;
    }
/**
     * inquiry PS RT function opened or not
     * @return if open return true, otherwise return false
     */
    public boolean isPSRTEnabled() {
        LogUtils.d(TAG, "FMRadioService.isPSRTEnabled: " + mIsPSRTEnabled);
        return mIsPSRTEnabled;
    }
/**
     * inquiry AF function opened or not
     * @return if open return true, otherwise return false
     */
    public boolean isAFEnabled() {
        LogUtils.d(TAG, "FMRadioService.isAFEnabled: " + mIsAFEnabled);
        return mIsAFEnabled;
    }

8.修改    private void startRDSThread() 
将                    if (RDS_EVENT_PROGRAMNAME == (RDS_EVENT_PROGRAMNAME & iRDSEvents)) {
修改成
                        if (mIsPSRTEnabled
                                && RDS_EVENT_PROGRAMNAME == (RDS_EVENT_PROGRAMNAME & iRDSEvents)) {
将                    if (RDS_EVENT_LAST_RADIOTEXT == (RDS_EVENT_LAST_RADIOTEXT & iRDSEvents)) 
修改成:
                        if (mIsPSRTEnabled
                                && RDS_EVENT_LAST_RADIOTEXT == (RDS_EVENT_LAST_RADIOTEXT & iRDSEvents))
将                    if (RDS_EVENT_AF == (RDS_EVENT_AF & iRDSEvents)) {
修改成:
                        if (mIsAFEnabled && RDS_EVENT_AF == (RDS_EVENT_AF & iRDSEvents)) {
9.修改FMRadioStation.java
将注释掉的函数    public static void setRDSEnabled(Context context, int type, boolean enable) {
和    public static boolean getRDSEnabled(Context context, int type) {
开启即可,若没有相关函数可将之前平台上的这两个函数copy过来
  相关解决方案