web-dev-qa-db-ja.com

デュアルSIMデバイスで指定されたSIMを使用して電話をかける

私は過去数日からこれを探していましたが、それを知るようになりました:

「Android out-of-out。では、デュアルSIMはサポートされていません。メーカーによるカスタム変更であり、それを制御するパブリックAPIはありません。」

以下のリンクで解決策が提供されていますが、私の携帯電話Samsung Galaxy S4 Miniでは動作しません。

2番目のsimからの呼び出し

また、このリンクを見つけましたが、非常に有益でした。

http://www.devlper.com/2010/06/using-Android-telephonymanager/

これで、次のコードを使用すると、ラッキーになって動作する可能性があります。

Intent callIntent = new Intent(Intent.ACTION_CALL)
                .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        callIntent.setData(Uri.parse("tel:" + phone));
        context.startActivity(callIntent);
callIntent.putExtra("com.Android.phone.extra.slot", 0); //For sim 1
and
callIntent.putExtra("com.Android.phone.extra.slot", 1); //For sim 2

これについてはわかりませんが、質問があります。

[SIMカードマネージャー]セクションの[設定]で、音声通話に優先SIMカードを選択する必要がある場合、4つのオプションが表示されます。

  1. 現在のネットワーク
  2. 常に尋ねる
  3. SIM 1
  4. SIM 2

[常に確認]オプションを選択すると、電話をかける前に、ダイアログボックスに表示されるSIMカードを選択して電話をかけるように常に求められます。私の質問は、ボタンを押して電話をかけるアプリでこのことを悪用することができますが、常に尋ねるオプションを選択したときと同じ方法で常に尋ねられます。

申し訳ありませんが、この質問は長くしましたが、必要だったと思います。事前に助けてくれてありがとう。

編集:

ボタンを押すたびにこれを達成するにはどうすればよいですか([設定]の[常に確認]オプションに似た種類): Select SIM Dialog Box

17
class Android

コード:

private final static String simSlotName[] = {
        "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"
};


Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + "any number"));
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    intent.putExtra("com.Android.phone.force.slot", true);
    intent.putExtra("Cdma_Supp", true);
    //Add all slots here, according to device.. (different device require different key so put all together)
    for (String s : simSlotName)
        intent.putExtra(s, 0); //0 or 1 according to sim.......

    //works only for API >= 21
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Lollipop)
        intent.putExtra("Android.telecom.extra.PHONE_ACCOUNT_HANDLE", (Parcelable) " here You have to get phone account handle list by using telecom manger for both sims:- using this method getCallCapablePhoneAccounts()");

    context.startActivity(intent);
9
Ajay Rawat
TelecomManager telecomManager = (TelecomManager) this.getSystemService(Context.TELECOM_SERVICE);
List<PhoneAccountHandle>    phoneAccountHandleList = telecomManager.getCallCapablePhoneAccounts();


 Intent intent = new Intent(Intent.ACTION_CALL).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.setData(Uri.parse("tel:" + number));
        intent.putExtra("com.Android.phone.force.slot", true);
        intent.putExtra("Cdma_Supp", true);
        if (simselected== 0) {   //0 for sim1
            for (String s : simSlotName)
                intent.putExtra(s, 0); //0 or 1 according to sim.......

            if (phoneAccountHandleList != null && phoneAccountHandleList.size() > 0)
                intent.putExtra("Android.telecom.extra.PHONE_ACCOUNT_HANDLE", phoneAccountHandleList.get(0));

        } else {      1 for sim2
            for (String s : simSlotName)
                intent.putExtra(s, 1); //0 or 1 according to sim.......

            if (phoneAccountHandleList != null && phoneAccountHandleList.size() > 1)
                intent.putExtra("Android.telecom.extra.PHONE_ACCOUNT_HANDLE", phoneAccountHandleList.get(1));

        }
        startActivity(intent);
4
dipanshu jindal

このオプションを探していたので、この問題に対する答えがあります。手順は次のとおりです。

  • まず、xposedフレームワークが必要です;
  • miuiアプリケーションをインストールします。
  • 連絡先に優先SIMオプションを追加
0
Raj Singhania