android - tiene - los celulares dual sim son originales
Llamar usando una SIM especificada en un dispositivo SIM dual (3)
He estado buscando esto desde los últimos días y llegué a saber que:
"Dual SIM no es compatible con Android fuera de la caja. Es una modificación personalizada por parte de los fabricantes y no hay una API pública para controlarla".
Se proporciona una solución en el siguiente enlace, pero no funciona en mi teléfono Samsung Galaxy S4 Mini.
También encontré este enlace, que me pareció muy informativo.
http://www.devlper.com/2010/06/using-android-telephonymanager/
Ahora sé que usando el siguiente código, podría tener la oportunidad de tener suerte para hacerlo funcionar:
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
No estoy seguro de esto, pero tengo una pregunta.
En Configuración, en la sección Administrador de tarjeta SIM, cuando tengo que elegir una tarjeta SIM preferida para la llamada de voz, obtengo cuatro opciones:
- Red actual
- Preguntar siempre
- SIM 1
- SIM 2
Cuando elijo la opción Preguntar siempre, antes de hacer una llamada, siempre me piden que elija una tarjeta SIM, que se muestra en un cuadro de diálogo, para realizar la llamada. Mi pregunta es si puedo explotar esto en mi aplicación donde presiono un botón para hacer una llamada, pero siempre me pregunta de la misma manera que cuando elegí la opción Preguntar siempre.
Lo siento, hice esta pregunta larga, pero creo que la requería. Por favor ayuda y muchas gracias de antemano.
EDITAR:
¿Cómo puedo lograr esto, cada vez que presiono cualquier botón (similar a la opción Preguntar Siempre en la Configuración):
Tengo una respuesta para este problema ya que estaba buscando esta opción. Aquí están los pasos:
- Primero necesitas el marco xposed y;
- instalar la aplicación miui y;
- añadir la opción de sim preferida en contacto
Código:
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);
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);