私のAndroidアプリケーションは、異なるモバイル国コードに対して異なる反応をする必要があります。
mcc310(US)にハードコードされているようです。この値はTelephonyManager.getSimCountryIso()
から、またはres/values-mcc123/
などのリソースフォルダーを使用して読み取ることができますが、エミュレーターでこの値を設定するにはどうすればよいですか?
TelephonyManager.getSimCountryIso()
が返すものを変更するには、単に実行します
_adb Shell setprop gsm.sim.operator.iso-country no
_
そして今はno(ノルウェー)を返します。
TelephonyManager.getSimOperator()
が返すもの(MCC + MNC)を変更したい場合は、実行します
_adb Shell setprop gsm.sim.operator.numeric 24201
_
mCCを242(ノルウェー)に、MNCを01(Telenor)に変更しました。
変更できる他のプロパティを確認してから実行する
_adb Shell getprop
_
これは、AVDとGenymotionの両方で機能することが確認されています。ただし、これによってこれらのプロパティが永続的に変更されることはありません。
このプロパティの値は、APIレベルによって異なることがわかりました。私はこの問題に対処しようとしました。
次のコマンドを使用して、API26の値を変更できます。
adb Shell
su
setprop gsm.operator.numeric 280701
注:一部のエミュレーターは再起動が必要です。
一部のエミュレータでは、プロパティの名前が異なる場合があります
プロパティ名は次のように見つけることができます。
adb Shell
getprop
次のようなデータが表示されます。
...
[dalvik.vm.lockprof.threshold]: [500]
[dalvik.vm.stack-trace-file]: [/data/anr/traces.txt]
[dalvik.vm.usejit]: [true]
[dalvik.vm.usejitprofiles]: [true]
[debug.atrace.tags.enableflags]: [0]
[debug.force_rtl]: [0]
[dev.bootcomplete]: [1]
[drm.service.enabled]: [true]
[gsm.current.phone-type]: [1]
[gsm.defaultpdpcontext.active]: [true]
[gsm.network.type]: [LTE]
[gsm.nitz.time]: [1524141151210]
[gsm.operator.alpha]: [Android]
[gsm.operator.iso-country]: [us]
[gsm.operator.isroaming]: [false]
[gsm.operator.numeric]: [310260]
[gsm.sim.operator.alpha]: [Android]
[gsm.sim.operator.iso-country]: [us]
[gsm.sim.operator.numeric]: [310260]
[gsm.sim.state]: [READY]
[gsm.version.baseband]: [1.0.0.0]
[gsm.version.ril-impl]: [Android reference-ril 1.0]
[hwservicemanager.ready]: [true]
[init.svc.adbd]: [running]
[init.svc.audio-hal-2-0]: [running]
[init.svc.audioserver]: [running]
[init.svc.bootanim]: [stopped]
[init.svc.camera-provider-2-4]: [running]
[init.svc.cameraserver]: [running]
...
テキストファイルの出力をコピーして、numeric
を検索します。プロパティ名を取得し、setprop <property name> <new MCC MNC>
を使用します
getProp
を使用して、値が変更されたかどうかを確認することもできます。
エミュレータでのMCC + MNCの変更は、ADBでのみ実行できます。エミュレータでMCC + MNCを変更するには、ADBに接続して次の手順を実行します
adb -s 127.0.0.1:53001 Shell
次に、国コードをそこに置きます。 23801はデンマークのcoutryコードです。
setprop persist.<name of the emulator>.mccmnc 23801
Droid4Xエミュレーターの場合は
setprop persist.droid4x.mccmnc 23801
エミュレータを再起動します。
MCCに依存することがすべての国で常に正しいとは限らないことを知ってください。たとえば、Digicellはいくつかの国で1つのMCC + MNCを使用しています。また、MCCの全体的な考え方は、ネットワークの観点からはかなりばかげていることも理解してください。どちらの場合もAT&Tハンドセットを使用してT-Mobileを使用している場合、ドイツにいるのかオランダにいるのかを知ることはかなり重要ではありません。
エミュレーターの場合:[設定]-> [ワイヤレスとネットワーク]-> [モバイルネットワーク]-> [アクセスポイント名]に移動します。セットAPNのMCC値を変更してから、コードを試してください。
Androidエミュレーターの設定を介して、MCC/MNCを変更することはできないようです。これが試行されるたびに、事前構成された「T-Mobile」APNがリストとネットワーク接続から消えます。変更後にエミュレータを自発的に再起動させたこともあります。
プログラムによる方法も機能せず、APNは次の直後に消えます。
root@generic_x86:/ # content update --uri content://telephony/carriers/ --bind name:s:'TheAPN' --bind apn:s:apn.operator.net --bind numeric:i:12345 --bind user:s: --bind password:s: --bind server:s: --bind proxy:s: --bind mmsproxy:s: --bind mmsc:s: --bind type:s: --bind mcc:i:123 --bind mnc:i:45 --bind current:i:1 --where _id=1
[〜#〜] msisdn [〜#〜] または [〜#〜] imei [〜#〜]を変更できるのと同じ方法でエミュレータをハッキングすることで可能になる可能性があります。 ] 、しかし。