Multi-Simデバイスでの着信コールのターゲットSimCardの検出


10

私はたくさんの投稿を読んで多くの解決策を試しましたが、すべての投稿の共通点は、それらがすべて古くなっており、少なくとも新しいバージョンのAndroidで動作する解決策が見つからなかったことです。

投稿1、結果: intent.getExtras().getInt("simId", -1)常に-1を返します

投稿2、結果:intent.getExtras().getInt("slot", -1)常に-1を返します

投稿3、結果:

String[] array = new String[]{
        "extra_asus_dial_use_dualsim",
        "com.android.phone.extra.slot",
        "slot",
        "simslot",
        "sim_slot",
        "subscription",
        "Subscription",
        "phone",
        "com.android.phone.DialingMode",
        "simSlot",
        "slot_id",
        "simId",
        "simnum",
        "phone_type",
        "slotId",
        "slotIdx"
};

for (String item :
        array) {
    Log.i(TAG, "Sim Card - " + item + " -----> " + intent.getExtras().getInt(item));
}

ログ:

PhoneCallReceiver: Sim Card - extra_asus_dial_use_dualsim -----> 0
PhoneCallReceiver: Sim Card - com.android.phone.extra.slot -----> 0
PhoneCallReceiver: Sim Card - slot -----> 0
PhoneCallReceiver: Sim Card - simslot -----> 0
PhoneCallReceiver: Sim Card - sim_slot -----> 0
PhoneCallReceiver: Sim Card - subscription -----> 0
PhoneCallReceiver: Sim Card - Subscription -----> 0
PhoneCallReceiver: Sim Card - phone -----> 0
PhoneCallReceiver: Sim Card - com.android.phone.DialingMode -----> 0
PhoneCallReceiver: Sim Card - simSlot -----> 0
PhoneCallReceiver: Sim Card - slot_id -----> 0
PhoneCallReceiver: Sim Card - simId -----> 0
PhoneCallReceiver: Sim Card - simnum -----> 0
PhoneCallReceiver: Sim Card - phone_type -----> 0
PhoneCallReceiver: Sim Card - slotId -----> 0
PhoneCallReceiver: Sim Card - slotIdx -----> 0

最初のSimCardと2番目のSimCardには同じ値0の同じログが表示されます。

他の同様の投稿も試しました。新しいバージョンのAndroidでは動作しませんでした!

Androidの新しいバージョン(7.0以降)で動作する別のソリューションはありますか?


intent.getExtras().getInt("item")<- itemではなく使用しているのでは"item"ないですか?
マイケル

また、あなたは意図があること、すべての特典を印刷しようとした持っていないあなたが想定しているものに比べ命名に差があるのかどうかを確認するために、含まれていますか?
マイケル

"item"かitemかに関係なく、常に0を返します。
Alireza Noorali

まあ、"item"このコンテキストではほぼ間違いなく間違っています。私が言ったように、あなたが期待しているものではなく、あなたが持っているものを印刷してみてください。このソリューション全体は少しハックのように見えますが、使用可能なキーを見つけても、一部のデバイスでは機能しない可能性があります。
マイケル

回答:


1

公式に、インテントによって提供される唯一の文書化されたは電話番号です。

一部のコンストラクターはインテントにsimスロット番号などの他の値を追加しますが、これは必須ではありません。これが、ポスト3に示されているように、可能な限り多くのスロットキー名があり、各コンストラクタが独自の実装を追加している理由です。

一部のコンストラクターが一部のモデルでこの値を追加しなかった可能性もありますが、それは確かにモデルの場合です。コンストラクタが値を提供しない場合、この値を見つける方法はありません。


答えは単なる説明であるため、断固として承認または拒否することはできません。しかし、結局のところ、答えは論理的です。
Alireza Noorali

2

あなたがこのようにした場合、それはうまくいくはずです。テストデバイスがAndroid 5.1以降で実行されていることを確認します。デュアルsimのサポートがv 5.1で追加されました(ここをチェックしてください

public class IncomingCallInterceptor extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
    String callingSIM = "";
    Bundle bundle = intent.getExtras();
    callingSIM = String.valueOf(bundle.getInt("simId", -1));

    if(callingSIM.equals("0")){
           // Incoming call from SIM1
        } else if(callingSIM.equals("1")){
           // Incoming call from SIM2
        }
    }
}

マニフェストに以下の権限を追加したことを確認してください

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

注意 :

これらの値は常に来る必要はありません。ネットワークプロバイダーのサポートが必要です。こちらのドキュメントをお読みください

現在のサブスクリプションのキャリアID。サブスクリプションが利用できない場合、またはキャリアが識別できない場合は、UNKNOWN_CARRIER_IDを返します。


1
私はすでにREAD_PHONE_STATE許可を追加しましたが、常に取得しますcallingSIM = -1
Alireza Noorali

@AlirezaNooraliテストに使用しているデバイス。そして、あなたはそれをAndroid 7以下のデバイスで動作させていますか?
ドロイデフ

デバイスはSamsung Galaxy S6 Android 7.0です。Android 7以下のデバイスについては
わかり

通常、simIdを取得できますか?あなたが電話をしていないとき
ドロイエフ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.