跳到主要內容

《App》AudioTagFixer


AudioTagFixer can help you:
1. Edit the tags of your audio files, include Title, Artist, Album, Genre and Track.(Modify Album Art is not yet supported.)
2. Fix the incorrect encoded tags in Traditional Chinese(Big5), Simplified Chinese(GBK), Japanese(Shift_JIS), Korean(EUC-KR) and Russian(CP1215) audio files quickly.
3. Support mp3, mp4, ogg, wma and flac formats.(Please note that although this app can modify tags in wma file, but in fact the Android system does not read them, so you may not be able to see the changes in your music player.)

* This app can help you correct garbled, but NOT translate into different languages or conversion of Traditional Chinese and Simplified Chinese.
* After you saved the audio file, the list will re-sort according to the new tags. Therefore, the order of the audio file in the list may be changed.
* If you need more encoding support, please e-mail to me, thank you.


AudioTagFixer 能幫助您:
1. 編輯音樂檔案中的標籤,包含標題、歌手、專輯、類型以及曲目。(修改專輯封面尚未支援。)
2. 快速修正在繁體中文(Big5)、簡體中文(GBK)、日文(Shift_JIS)、韓文(EUC-KR)以及俄文(CP1215)音樂檔案中的標籤亂碼。
3. 支援mp3、mp4、ogg、wma以及flac格式。(請注意,雖然此應用程式可以修改wma檔案中的標籤,但實際上Android系統並不會去讀取它們。所以你可能無法在你的音樂播放器中看到的變化。)

* 這個應用程式可以幫助您修正亂碼,但無法幫您翻譯成其他語言或進行繁體/簡體中文互換。
* 在您儲存音樂檔案後,列表將依據新的標籤重新排序。因此,列表中音樂檔案的順序可能會改變。
* 如果您需要更多編碼支援,請寫信給我,謝謝。



Free Version (Ad-Supported)

留言

這個網誌中的熱門文章

App 在 Google Play 被停權與恢復的經驗分享

最近心情真像是洗了三溫暖~ 前幾天把已經很久沒維護的  EZ App安裝器  稍微調整了 UI,修了修 Bug,提交更新。 幾個小時過去發現 Google Play 還沒反應,感覺有點怪...可能是系統忙碌吧。當下也沒想太多就跑去睡了。 隔天一早打開開發者控制台,登愣!又看到熟悉的景象... App 被停權了!!! 為什麼說"又"呢? 出來混總是要還的,被停權也不是第一次了。 多年前剛開始在 Google Play 上架時,學別人在商店描述裡加了一堆 Keyword,其實有沒有用也不知道。然後某次開發人員計劃政策調整後,這種行為被視為違規,於是一下子被停權兩隻 App。 畢竟是自己沒注意到政策調整,而且罪證確鑿,只好摸摸鼻子認了。不過明明是很簡單就能修正的問題,Google 總是完全不給機會就直接停權,手段實在狠毒!這也是最讓人難以接受的地方。 順帶一題,Google Play 的違規處分大概分為以下幾種: 拒絕 :更新版本遭拒,但之前所發佈的版本仍會保留在 Google Play 商店中。 下架 :應用程式會從 Google Play 下架。必須提交符合規範的更新版本,才能讓應用程式重新上架。 停權 :應用程式會從 Google Play 下架。必須更改 package name,才能讓應用程式重新上架。這意味著將失去原本累積的下載數、統計資料和評分,一切重頭來過。 終止開發者帳號 :所有應用皆會下架,無法再上架新應用。"相關帳戶"也會一併處分,不允許再註冊新的開發者帳號。 我三次遇到的都是停權,但這次的原因是為什麼呢? 根據信裡的說明是違反了開發人員發佈協議的"其他商店"條款。 什麼是"其他商店"條款? 4.5 其他商店。凡是「產品」具有任何推廣其他商店之用途,藉此引導使用者透過這類替代性管道發佈 Android 軟體應用程式或遊戲,則一概禁止在「商店」中發佈或提供。 奇怪?我的 App 裡面沒有推廣其他應用程式商店啊? 信中有申訴的管道,寫信去問明白吧。網頁說可以用中文 、 英文 、 日文及韓文提出申訴,就直接寫中文吧。一來比較好溝通,同時看看都是講中文的會不會比較寬大為懷 XDD~ 提出申訴後過了幾個小時,收到回覆了

使用 <uses-feature> 的注意事項

<uses-feature> 最早是在 Android 1.6 SDK (API Level 4) 中出現的,他的用途是用來宣告 App 會使用到哪些軟硬體功能(比如 Camera、Bluetooth、OpenGL ES version...)。不過事實上系統本身並不會去檢查這些設定,但 Google Play 確會用這些設定去過濾要呈現哪些 App 給使用者。 比如說我宣告了下面這行,表示我會使用到 Camera 功能。這樣 Google Play 就不會將我的 App 顯示在沒有 Camera 的裝置上。 <uses-feature android:name="android.hardware.camera" /> 不過後來在 Android 2.0 SDK (API Level 5) 中,<uses-feature> 多了一個屬性叫  android:required 。當某功能在 App 中是 必要 時需設定為  true ,若是 非必要 時則設成  false 。咦?...若是不需要的話,我直接省略 <uses-feature> 不是更省事嗎? 在看完落落長的  開發者文件  後才瞭解,嚴格來說,每個 App 都 應該 要清楚宣告哪些功能是必要或非必要。但因為種種原因,開發者可能忽略或未正確宣告。所以 Google Play 除了檢查 <uses-feature> 外,還會參考 <uses-permission> 的設定。當有設定 <uses-permission> 時, Google Play 會假定相關的功能是 必要 的,並加入過濾。 舉例來說,我的 App 會使用到 Camera,但不是必要的。而我只宣告了 Camera 的 <uses-permission>,卻忽略了 <uses-feature>。 <uses-permission android:name="android.permission.CAMERA" /> 此時 Google Play 發現了這個 <uses-permission>,便會將 Camera 視為 必要 而進行過濾,沒有 Camer

利用 Java Reflection 來呼叫被隱藏 {@hide} 的 API

注意:本文的範例於 Android 8 (Oreo) 上已無法執行,而 Google 也表明為了改善應用程式的安全與穩定,未來將逐步限制這些非正規的存取方式。 如果您有研究過 Android Source Code,應該會發現其中有許多函式都被標註了 @hide。也就是這些函式在 SDK 中是被隱藏的,一般情形下無法被呼叫使用。但有時我們又想使用這些功能該怎麼辦呢? 在不更動 Android System 的前提下,我們可以透過 Java 的反射機制 (Java Reflection) 來達成。 範例: 我們在 Android Source Code 中的 PackageManager 類別裡發現了一個函式 getPackageSizeInfo,可以用來取得應用程式的磁碟空間使用量,但在 SDK 內卻找不到此函式。 我們先試著用 getMethods 列出 PackageManager 中所有的函式 PackageManager pm = getPackageManager(); Method[] methods = pm.getClass().getMethods(); for (int i = 0; i < methods.length; i++) { Log.d(TAG, methods[i].getName()); } 看一下結果,沒錯,裡面確實有 getPackageSizeInfo 這個函式 調用方式: Method getPackageSizeInfo = pm.getClass().getMethod( "getPackageSizeInfo", String.class, IPackageStatsObserver.class); getPackageSizeInfo.invoke(pm, "xxx.xxx.xxx", new IPackageStatsObserver.Stub() { @Override public void onGetStatsCompleted(PackageStats pStats, boolean succeeded) throws RemoteExc