Android: программная отправка MMS с определенной SIM-карты на устройстве с двумя SIM-картами

Мой код успешно отправляет MMS. Подход использует ConnectivityManager

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
{
    NetworkRequest.Builder builder = new NetworkRequest.Builder();

    builder.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR);
    builder.addCapability(NetworkCapabilities.NET_CAPABILITY_MMS);
    
    NetworkRequest networkRequest = builder.build();

    cm.requestNetwork(networkRequest, new ConnectivityManager.NetworkCallback()
    {
        @Override
        public void onAvailable(Network network)
        {
            super.onAvailable(network);
            // do MMS sending here using HTTP/network APIs
            cm.unregisterNetworkCallback(this);
        }
    });
}

В телефоне с двумя SIM-картами этот подход, похоже, выбирает SIM-карту по умолчанию и отправляет MMS с этого номера (я не уверен, как выбирается значение по умолчанию).

Как указать слот для SIM-карты или идентификатор подписки в составе запроса NetworkRequest? Или есть другой способ?

Просто повторюсь, этот вопрос касается только MMS, а не SMS. Кроме того, речь не идет об отправке MMS программно (это обсуждается в другом месте в SO). Вопрос специфичен для устройств с двумя SIM-картами.

Спасибо


person PVS    schedule 27.10.2020    source источник


Ответы (1)


Вы можете получить информацию о симе следующим способом

//above Android API 22
if (Build.VERSION.SDK_INT > 22) {
//for dual sim mobile
SubscriptionManager localSubscriptionManager = SubscriptionManager.from(this);

if (localSubscriptionManager.getActiveSubscriptionInfoCount() > 1) {
 //if there are two sims in dual sim mobile
    List localList = localSubscriptionManager.getActiveSubscriptionInfoList();
    SubscriptionInfo simInfo = (SubscriptionInfo) localList.get(0);
    SubscriptionInfo simInfo1 = (SubscriptionInfo) localList.get(1);

    final String sim1 = simInfo.getDisplayName().toString();
    final String sim2 = simInfo1.getDisplayName().toString();

}else{
 //if there is 1 sim in dual sim mobile
    TelephonyManager tManager = (TelephonyManager) getBaseContext()
            .getSystemService(Context.TELEPHONY_SERVICE);

    String sim1 = tManager.getNetworkOperatorName();

}

}else{
//below android API 22
        TelephonyManager tManager = (TelephonyManager) getBaseContext()
                .getSystemService(Context.TELEPHONY_SERVICE);

        String sim1 = tManager.getNetworkOperatorName();
}
person Lakpriya Senevirathna    schedule 26.11.2020
comment
Вопрос: как отправить MMS через конкретную SIM - person PVS; 04.12.2020
comment
Вы можете выбрать конкретного сима, используя этот метод. Затем используйте метод MMS для отправки MMS. - person Lakpriya Senevirathna; 05.12.2020
comment
OK. Предположим, известен индекс слота для SIM-карты или SubscriptionInfo. Что дальше? Какой метод или метод MMS использует эти (или эквивалентные альтернативы) в качестве входных данных? - person PVS; 05.12.2020