Depois de muita pesquisa em fóruns, agora eu sei que não há como encontrar o número de série IMSI ou SIM para ambos os cartões SIM em um telefone dual SIM (exceto para entrar em contato com o fabricante). Agora, minha nova pergunta é: podemos detectar que o telefone tem dois SIMs? Eu acredito que pode ser detectado com alguma inteligência. Algumas maneiras que consigo pensar são:
Discando um código USSD e rastreando os logs do número IMEI (tentei fazer isso com * 139 # na Índia. Funcionou.) Isso me dará o número IMEI do SIM do qual disquei o código USSD. (Presume-se que o telefone segue as diretrizes do Android e tem dois números IMEI.)
Armazenar o número de série do SIM e / ou IMSI para o SIM. E após a detecção de qualquer outro número IMSI / Serial, mesmo que o telefone não tenha sido reinicializado (ou seja, o SIM foi alterado), rastreando alguns logs ou por algum tratamento de evento de transmissão.
Discando * 06 # você verá os dois números IMEI. De alguma forma, obtenha esses dois números. (Algo como captura de tela e análise de imagem para texto.)
Se alguém puder pensar em outras maneiras, será muito bem-vindo. Eu realmente apreciaria qualquer tipo de ajuda em relação a isso. Além disso, se alguém tiver qualquer informação sobre APIs de qualquer fabricante ou links para contatá-lo, compartilhe com o pessoal da comunidade.
Respostas:
Atualização 23 de março de 2015:
Outra opção possível:
Você pode usar o reflexo Java para obter os dois números IMEI.
Usando esses números IMEI, você pode verificar se o telefone é um SIM DUAL ou não.
Experimente a seguinte atividade:
E aqui está
TelephonyInfo.java
:Editar:
Obter acesso a métodos como "getDeviceIdGemini" para detalhes de outro slot SIM prevê a existência de método.
Se o nome desse método não corresponder ao nome fornecido pelo fabricante do dispositivo, ele não funcionará. Você deve encontrar o nome do método correspondente para esses dispositivos.
Encontrar nomes de métodos para outros fabricantes pode ser feito usando reflexão Java da seguinte maneira:
EDITAR:
Como Seetha apontou em seu comentário:
Está funcionando para ela. Ela teve sucesso em obter dois números IMEI tanto para o SIM no dispositivo Samsung Duos.
Adicionar
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
EDIT 2:
O método usado para recuperar dados é para Lenovo A319 e outros telefones desse fabricante (Crédito Maher Abuthraa ):
fonte
com.android.internal.telephony.RILConstants$SimCardID
internamente. Até tentei criar essa classe com a mesma assinatura de métodos e os mesmos nomes de variáveis. Mas sem sorte. Tentará obter o código-fonte e tentará verificar. Obrigado.Tenho um dispositivo Samsung Duos com Android 4.4.4 e o método sugerido por Seetha na resposta aceita (ou seja, chame getDeviceIdDs) não funciona para mim, pois o método não existe. Consegui recuperar todas as informações de que precisava chamando o método "getDefault (int slotID)", conforme mostrado abaixo:
Além disso, reescrevi o código que testa iterativamente os métodos para recuperar essas informações para que ele use uma matriz de nomes de métodos em vez de uma sequência de try / catch. Por exemplo, para determinar se temos dois SIMs ativos, poderíamos fazer:
Dessa forma, se um novo nome de método for sugerido para algum dispositivo, você pode simplesmente adicioná-lo ao array e ele deve funcionar.
fonte
Existem várias soluções nativas que encontrei enquanto procurava a maneira de verificar a operadora de rede.
Para API> = 17:
No AndroidManifest, adicione permissão:
Para obter a operadora de rede, você pode verificar os códigos mcc e mnc:
Para API> = 22:
Para API> = 23. Para verificar se o telefone é duplo / triplo / muitos sim:
fonte
Consigo ler os IMEI's do OnePlus 2 Phone
fonte
Estava dando uma olhada nos registros de chamadas e percebi que além dos campos usuais no conteúdo do managedCursor, temos uma coluna "simid" em telefones Dual SIM (verifiquei no Xolo A500s Lite), de modo a marcar cada chamada no registro de chamadas com um SIM. Este valor é 1 ou 2, provavelmente denotando SIM1 / SIM2.
Não encontrei esta coluna em um único telefone SIM (verifiquei no Xperia L).
Portanto, embora eu não ache que essa seja uma maneira infalível de verificar a natureza do dual SIM, estou postando aqui porque pode ser útil para alguém.
fonte
Dicas:
Você pode tentar usar
ctx.getSystemService("phone_msim")
ao invés de
ctx.getSystemService(Context.TELEPHONY_SERVICE)
Se você já tentou a resposta de Vaibhav e
telephony.getClass().getMethod()
não conseguiu, acima está o que funciona para meu celular Qualcomm .fonte
Encontrei essas propriedades do sistema no Samsung S8
Além disso, de acordo com a fonte: https://android.googlesource.com/platform/frameworks/base/+/master/telephony/java/com/android/internal/telephony/TelephonyProperties.java
getprop persist.radio.multisim.config
retorna "dsds
" ou "dsda
" no multi sim.Eu testei isso no Samsung S8 e funciona
fonte
Commonsware diz que isso não é possível. Por favor, veja o seguinte:
Não é possível detectar Dual SIM usando Android SDK.
Aqui está mais um diálogo sobre o assunto:
O cara da equipe de desenvolvimento do Google diz que detectar Dual SIM usando Android SDK não é possível.
fonte