1. 程式人生 > >summer's android 專欄

summer's android 專欄

歌曲名、藝術家名顯示亂碼

MediaPickerActivity.java中新增方法changeStringEncode用來轉換字串編碼:

publicstatic String changeStringEncode(String content)

{

 if(java.nio.charset.Charset.forName("GB2312").newEncoder().canEncode(content))

  {

       //Log.d(TAG, "GB2312...");

  }

  elseif(java.nio.charset.Charset.forName("ISO-8859-1").newEncoder().canEncode(content))

  {

       //Log.d(TAG, "ISO-8859-1...");

      try

       {

                 content= new String(content.getBytes("ISO-8859-1"), "GBK");

       }

       catch (UnsupportedEncodingException e)

       {

                 //TODO Auto-generated catch block

                 e.printStackTrace();

        }

   }

   else if(java.nio.charset.Charset.forName("GBK").newEncoder().canEncode(content))

   {

        //Log.d(TAG, "GBK...");

   }

   elseif(java.nio.charset.Charset.forName("UTF-8").newEncoder().canEncode(content))

   {

                   try {

                 content= new String(content.getBytes("UTF-8"), "GBK");

        }

        catch (UnsupportedEncodingException e){

                 //TODO Auto-generated catch block

                 e.printStackTrace();

        }

                 //Log.d(TAG,"UTF-8...");

    }

    else if(java.nio.charset.Charset.forName("UTF-16").newEncoder().canEncode(content))

    {

        //Log.d(TAG, "UTF-16...");

    }

    return content;

}

之後在bindView中修改轉換標題名,專輯名,藝術家名:

//String name =cursor.getString(mTitleIdx);

String name =changeStringEncode(cursor.getString(mTitleIdx));

//name =cursor.getString(mAlbumIdx);

name = changeStringEncode(cursor.getString(mAlbumIdx));

//name =cursor.getString(mArtistIdx);

name = changeStringEncode(cursor.getString(mArtistIdx));

二、歌詞在切換語言後顯示亂碼

多語言環境中,中文歌曲的歌詞在中文環境下是正常顯示的,而切換到其他如法語、阿拉伯語等語言時,會發生亂碼的情況,修改點如下:

fileReader= new BufferedReader(new InputStreamReader(connection.getInputStream(),LyricsLocale.defLocale2CharSet()));

改為

FileInputStreamfis = new FileInputStream(lrcFile);

BufferedInputStreamin = new BufferedInputStream(fis);

in.mark(4);

byte[]first3bytes = new byte[3];

n.read(first3bytes);

in.reset();

if(first3bytes[0] == (byte) 0xEF && first3bytes[1] == (byte) 0xBB&& first3bytes[2] == (byte) 0xBF) {// utf-8

         fileReader = new BufferedReader(newInputStreamReader(new FileInputStream(lrcFile), "utf-8"));

}

elseif (first3bytes[0] == (byte) 0xFF && first3bytes[1] == (byte) 0xFE) {//unicode

         fileReader = new BufferedReader(newInputStreamReader(new FileInputStream(lrcFile), "unicode"));                                  

}

elseif (first3bytes[0] == (byte) 0xFE && first3bytes[1] == (byte) 0xFF) {//utf-16be

         fileReader = new BufferedReader(newInputStreamReader(new FileInputStream(lrcFile), "utf-16be"));                                                                      

}

elseif (first3bytes[0] == (byte) 0xFF && first3bytes[1] == (byte) 0xFF) {//utf-16le

         fileReader = new BufferedReader(newInputStreamReader(new FileInputStream(lrcFile), "utf-16le"));                                                                       

}

else{// GBK

         fileReader = new BufferedReader(newInputStreamReader(new FileInputStream(lrcFile), "GBK"));

}


相關推薦

summer's android 專欄

歌曲名、藝術家名顯示亂碼 MediaPickerActivity.java中新增方法changeStringEncode用來轉換字串編碼: publicstatic String changeStringEncode(String content) {  if(java.

【林學森的Android專欄】從系統實現的層面不斷剖析Android相關開發知識

本書版本輸出到臺灣地區,衷心感謝大家的支援。《深入理解Android核心設計思想》新書已在全國各大城市書店上市。 電子書店購買地址(不斷增加中): 1. China-pub 2. 京東 3. Amazon 4. 噹噹網 5. 淘寶網 6. 比比看哪邊購書便宜

林學森的Android專欄

做音樂最離不開的效果器是什麼?相信大多數朋友都會回答:是EQ!不錯,正是有了這個所謂“均衡”的效果器,我們的音樂才不會過載,樂器音色才會如此豐富。然而知道1加1等於2更要知道1加1為什麼等於2。今天我把這個效果器扒光,從根本上來分析它的工作原理。“EQ的原理??我知道我知道

Android Studio 出現 Gradle's dependency cache may be corrupt 解決方案

解決方案 -s 地址 com android 版本 mage images cor 將 .\項目地址\gradle\wrapper\gradle-wrapper.properties 文件中的 gradle版本 與 正常的版本 修改一致即可.Android Studi

EventBus - Android's Event Bus

word inpu ive show [1] -c tin iss cli [1] About EventBus EventBus is a publish/subscribe event bus for Android EventBus... simplifies

Android 6.0 指紋識別功能學習(一)----阿冬專欄!!!

轉載自:http://www.cnblogs.com/changyuet/p/5535082.html     由於畢設需要設計增強的身份認證(生物特徵認證方式),所以需要學習指紋識別相關的android6.0功能,進而設計自己的畢設:支援媒體可信通訊的andro

ionic打包報錯:You have not accepted the license agreements of the following SDK components: [Android S

錯誤資訊: ...... You have been opted out of telemetry. To change this, run: cordova telemetry on. Android Studio project detected ANDROID_HOME=C:\User

2018 ccnu summer 二分 [Cloned] The Frog's Games

C - The Frog's Games The annual Games in frogs' kingdom started again. The most famous game is the Ironfrog Triathlon. One test in the Ironfrog Tria

Effects of Java’s Synthetic Accessor Methods in Android

Effects of Java’s Synthetic Accessor Methods in Android https://medium.com/thoughts-overflow/effects-of-javas-synthetic-accessor-methods-in-and

Android 報錯 java.lang.SecurityException: caller uid 10431 is different than the authenticator's uid

Android 開發,賬戶與同步。 在登入時使用系統AccountManager 進行賬戶新增,( 然後在手機-設定-賬戶與同步裡面可以進行檢視。) 在登入完成,進行新增時,報錯java.lang.SecurityException: caller uid 10431 is differen

android Please fix the module's configuration in the build.gradle file and sync the project again

新匯入了 安卓專案就出現了這個問題。而且發現 專案 就是出現了一個 專案名, 不能開啟 專案明細裡面的東西看,也是奇怪 試著編譯 一下 gradle 專案,看看是不是會出現其他更多提示錯誤的。 結果發現是 因為    classpath 'com.android.tools

android Please fix the module's configuration in the build.gradle file and sync the project again

新匯入了 安卓專案就出現了這個問題。而且發現 專案 就是出現了一個 專案名, 不能開啟 專案明細裡面的東西看,也是奇怪 試著編譯 一下 gradle 專案,看看是不是會出現其他更多提示錯誤的。 結果發現是 因為    classpath 'com.andro

android中string.xml中%1$s、%1$d等的用法,空字串在string.xml中

今天在研究前輩寫的程式碼的時候,突然發現string裡面出現了<stringname="item_recent_photo">最近拍攝%1$s</string> 有點蒙圈,這個不是c語音裡面的表示方式,就百度了一下,記。。。 在TextView中

Android之格式變數%1$s、%1$d的用法

作用:動態的拼接字串,使程式碼更簡潔,更易維護和擴充套件。 1、整型 如,“他的手裡有XX個蘋果”,這個XX需要從服務或者別的地方獲取,那麼在程式碼中就可以這麼寫: <string name="number">他的手裡有%1$d個蘋果</string> 同時,

Android之傳S

先添上一個計算手機中的感測器的程式碼 public class SensorDetectorActivity extends Activity { //SensorManager物件引用 SensorManager mySensorManager; @Ov

Android/Linux的專欄

全志平臺開發坑點 全志平臺接觸得不少,但是都是燒一下韌體。最近才涉及到編譯系統原始碼,與其他平臺有很大的不同。這裡小結一下。 lichee很強大,也很迷惑人,你不會知道如何make menuconf

Android四大元件之S

1.什麼是Service? Service即服務,服務就是無使用者介面也可以執行在後臺的元件。與Activity不同的是:一直在後臺執行,沒有使用者介面。 2.使用Service還是新執行緒 前提:需要在主執行緒外執行耗時工作 需要與使用者互動時,建立新執行緒

Eclipse 使用 android.support.v7 包時,遇到的問題s

在編寫android的程式碼時經常需要考慮低版本的相容性問題,eclispe中建立android工程minimum sdk的版本小於target的版本時,有可能會自動生成一個appcompat_v7的工程。 1. Android 匯入android.suppo

【天高任鳥飛海闊憑魚躍的專欄android驅動_隨筆_嵌入式

專欄達人 授予成功建立個人部落格專欄

專欄 】- Android知識體系

Android知識體系 收納了Android知識體系中個大類知識點,比如IPC, View實踐和事件機制,四大元件原始碼分析,訊息機制等。 加入了很多原始碼解析,適合對Android有些基礎。 主要對Android體系進行梳理