以前 GT-I9000 のFMラジオを日本周波数に対応したり、XPERIA X10 mini pro のFMラジオを日本周波数対応にしたり、ideosのFMラジオは挫折したりしてました。
Galaxy S の国際版であるところの GT-I9000 は、元々は対応してたけど途中からなぜか選択できなくなっただけだったので、隠された選択肢を表示するようにするだけで対応できました。
XPERIA X10 mini pro の場合は XML ファイルをひとつ追加すれば対応できるというお手軽さ。
まあ、どちらの場合も結果的には簡単に対応できるようになっていますが smali を注意深く見てたどり着いたんですよ!
さて、今回。
以前のように項目が表示されていないだけではなく色々な問題がありました。
結果から言えば変更点は11箇所です。
FMラジオの基本である下限と上限を日本周波数に合わせる。
下限 0x222e(=8750→87.5MHz) を 0x1db0(=7600→76.0MHz)
上限 0x2a30(=10800→108.0MHz) を 0x2328(=9000→90.0MHz)
これを置換するので8箇所で、残りはBASE_FREQとMAX_FREQを設定している部分を書き換えるので2箇所、setBand(I) の 0x1 を 0x2 に書き換えれば概ね完成です。
今回は固定値を書き換えてしまうのと設定に Japan を出すのが面倒だったので Region を Europe のままでしました。
周波数表記は正常ですが、メモリは画像なので90とか100とかのまんまですが気にしないでください。
ちょっとしか使っていませんが、受信感度はSより良いかも。音質は屋外で電波が良ければ素のSよりは良いです。
setBandで2を指定しているのは日本だけなので下層では日本周波数対応してるんですが、国内版でFMラジオが削られているからなのか、UI作るのが面倒なのか対応してくれていませんでした。
ということで、今回の書き換えをすると日本以外では聞けなくなりますのでご了承ください。
具体的な書き換え場所は続き。FmRadio.odex を baksmali するとか基本的なことはガンバレー
[patch]
— a/smali/com/sec/android/app/fm/MainActivity.smali Tue May 10 02:18:52 2011
+++ b/smali/com/sec/android/app/fm/MainActivity.smali Tue May 10 14:19:01 2011
@@ -304,10 +304,10 @@
.prologue
const/4 v2, 0x0
– const/high16 v1, 0x42d8
+ const/high16 v1, 0x42b4
.line 94
– const/high16 v0, 0x42af
+ const/high16 v0, 0x4298
sput v0, Lcom/sec/android/app/fm/MainActivity;->BASE_FREQ:F
@@ -324,12 +324,12 @@
sput-object v2, Lcom/sec/android/app/fm/MainActivity;->toastTvout:Landroid/widget/Toast;
.line 4916
– const-wide/16 v0, 0x222e
+ const-wide/16 v0, 0x1db0
sput-wide v0, Lcom/sec/android/app/fm/MainActivity;->MIN_CHANNEL:J
.line 4917
– const-wide/16 v0, 0x2a30
+ const-wide/16 v0, 0x2328
sput-wide v0, Lcom/sec/android/app/fm/MainActivity;->MAX_CHANNEL:J
@@ -371,7 +371,7 @@
iput v0, p0, Lcom/sec/android/app/fm/MainActivity;->mCurrentFreq:F
.line 196
– const-wide/16 v0, 0x222e
+ const-wide/16 v0, 0x1db0
iput-wide v0, p0, Lcom/sec/android/app/fm/MainActivity;->mCurrentchannel:J
@@ -5219,7 +5219,7 @@
if-eqz v1, :cond_4c
.line 1515
– const/4 v0, 0x1
+ const/4 v0, 0x2
invoke-virtual {p0, v0}, Lcom/samsung/media/fmradio/FMPlayer;->setBand(I)V
— a/smali/com/sec/android/app/fm/ui/FrequencyDisplayBgView.smali
+++ b/smali/com/sec/android/app/fm/ui/FrequencyDisplayBgView.smali
@@ -41,12 +41,12 @@
invoke-direct {p0, p1}, Landroid/view/View;->
.line 22
– const/16 v0, 0x222e
+ const/16 v0, 0x1db0
iput v0, p0, Lcom/sec/android/app/fm/ui/FrequencyDisplayBgView;->MIN_FREQUENCY:I
.line 23
– const/16 v0, 0x2a30
+ const/16 v0, 0x2328
iput v0, p0, Lcom/sec/android/app/fm/ui/FrequencyDisplayBgView;->MAX_FREQUENCY:I
@@ -73,12 +73,12 @@
invoke-direct {p0, p1, p2}, Landroid/view/View;->
.line 22
– const/16 v1, 0x222e
+ const/16 v1, 0x1db0
iput v1, p0, Lcom/sec/android/app/fm/ui/FrequencyDisplayBgView;->MIN_FREQUENCY:I
.line 23
– const/16 v1, 0x2a30
+ const/16 v1, 0x2328
iput v1, p0, Lcom/sec/android/app/fm/ui/FrequencyDisplayBgView;->MAX_FREQUENCY:I
@@ -173,7 +173,7 @@
.local v0, distance:J
iget-wide v2, p0, Lcom/sec/android/app/fm/ui/FrequencyDisplayBgView;->mFrequencyPosition:J
– const-wide/16 v4, 0x222e
+ const-wide/16 v4, 0x1db0
sub-long/2addr v2, v4
[/patch]