Android で他の sim にアクセスする方法はありますか? 私は、デュアルSIMのAndroid携帯であるAndroid Cherry Mobile Orbitを持っています。携帯電話用の SMS アプリケーションを開発したいのですが、最初の sim しかアクセスできません。Enterキーを押してメッセージを送信すると、どのシムにメッセージが送信されるかというプロンプトが表示されるように、他のシムにアクセスしたいです。私はそれが独自のものであることを知っていますが、電話メーカーはそれについてフィードバックを持っていません. 他に方法はありますか?微調整か何か?
4 に答える
関連する「サービスマネージャー」、「テレフォニーマネージャー」、いくつかのインターフェーススタブ、または「ジェミニ」などのキーワードを見つけたら、dex2jarまたはapktoolを使用して、デュアルSIMカードデバイスで実行されるアプリを元に戻すことができると思いますJava Reflection を使用して、このクラスのすべてのメソッドを反映します。その後、この目標を達成できます。
公式には現在、これをサポートするAPIはありません。デバイスの製造元に連絡する必要があります。
自分の携帯電話用のアプリを開発していて、各 SIM カードに割り当てられたID sim_id
(sim_id
私はしました)、次のコードを使用して、SMS 送信用のデフォルトの SIM を設定できます。
int simId = <place desired SIM ID here>;
Intent simIntent = new Intent("android.intent.action.SMS_DEFAULT_SIM");
simIntent.putExtra("simid", simId);
sendBroadcast(simIntent);
他のいくつかの UI プロンプト機能 (優先 SIM を実際に「選択」するため) と組み合わせると、これでうまくいくはずです。
このアプローチがうまくいくかどうかはまったくわかりません(コードは非常に「標準的」に見えますが)。Mlais MX28(カスタマイズROM付き)で試行錯誤して見つけました。しかし、それでも試してみる価値はあると思います。:)
更新:
奇妙なことに、私が取り組んでいたアプリをいくつか更新した後、ソリューションが予期せず機能しなくなりました。しかし、私は別の方法に出くわしました(より有望なようです)。name
(設定キャッシュにはs gprs_connection_sim_setting
、voice_call_sim_setting
などのエントリが含まれているため、これは他の SIM 選択シナリオにも拡張できるとvideo_call_sim_setting
思います。)
ContentValues val = new ContentValues();
val.put("value", "here goes the preferred SIM ID");
getContentResolver().update(Uri.parse("content://settings/system"), val, "name='sms_sim_setting'", null);
(残念ながら、これにはandroid.permission.WRITE_SETTINGS
許可が必要です。)