4

私はデュアルSIMのAndroid携帯を持っています。着信メッセージを問題なく読み取るカスタムブロードキャストレシーバーを使用しています。どのシムがメッセージを受信したかを知る方法があるのだろうか。

4

2 に答える 2

1

TelephonyManagerを使用して、アクティブなシムの情報を取得できます。たとえば、シリアル番号です。

TelephonyManager telephoneMgr = (TelephonyManager) ctx.getSystemService(Context.TELEPHONY_SERVICE);

String simSerial = telephoneMgr.getSimSerialNumber();

また、line1Numberを取得することもできます。ネットワーク事業者が番号を入力した場合は、SMSメッセージのto>フィールドで取得した番号と比較できます。

String phoneNumber = telephoneMgr.getLine1Number();

それが役に立てば幸い

于 2012-12-17T13:28:24.147 に答える
0

私はこの問題に本当に苦労し、最終的に解決策を見つけましたが、APIレベル22より上でしかテストしませんでした。

受信したインテントの追加情報を確認する必要があります。私の場合、インテントの追加バンドルには、「スロット」と「サブスクリプション」という2つの便利なキーがあります。

次に例を示します。

public class IncomingSms extends BroadcastReceiver {

          public void onReceive(Context context, Intent intent) {

                // Retrieves a map of extended data from the intent.
                Bundle bundle = intent.getExtras();

                int slot = bundle.getInt("slot", -1);
                int sub = bundle.getInt("subscription", -1);

                /*
                  Handle the sim info
                */
            }
}

私はこれに関するドキュメントを見つけられなかったので、これはデバイス/メーカーに依存する可能性があります。キーが異なるか、そのようなものであると想像できます。これは、バンドルのキーセットをダンプすることで確認できます。

Set<string> keyset = bundle.keySet();
于 2016-08-11T12:43:42.850 に答える