2012-07-03 17 views
25

Ci sono diverse domande sull'accesso alle funzionalità dual SIM tramite l'SDK Android, a tutte le quali viene fornita una breve dichiarazione che tali funzionalità non sono supportate in Android.API doppia SIM Android

Nonostante questo, esistono telefoni dual SIM e applicazioni come MultiSim sembrano essere in grado di rilevare questo in qualche tipo di modo indipendente dal produttore.

Così, a cominciare da quello di riconoscimento, vorrei provare a fare alcune domande più appuntiti:

  • significa "SDK di Android non supporta più SIM dispone" significa che non esistono queste caratteristiche, o che sia semplicemente una cattiva idea per provare a usarli?
  • C'è un provider di contenuti Android o un pacchetto interno (com.android ...) che fornisce informazioni sulla scheda SIM? (TelephonyManager, per quanto posso vedere nei documenti e nel codice, non menziona più schede SIM)
  • Esiste qualche segnalazione di un produttore che espone più funzioni SIM agli sviluppatori?
  • Se dovessi cercare funzionalità non documentate da un produttore, come potrei farlo?

(A proposito, il punto di tutto questo è semplicemente quello di implementare questo algoritmo:. Inviare uno SMS con la carta SIM 1; se la consegna non riesce, passare alla scheda SIM 2 e inviare nuovamente il messaggio in questo modo)

+0

@ user1447002-have u riusciti a costruire questa applicazione .. ?? Perché io soffro degli stessi problemi e devo fornire una funzionalità simile nella mia applicazione .. –

+0

No, non ho. Ho visto messaggi di utenti interni di Google, Samsung e Motorola che non stanno rendendo disponibile il codice. –

+0

@ user1447002-Grazie amico..ma hai trovato un'alternativa a quello .. ?? –

risposta

3

Android non supporta più funzioni SIM prima API 22. Ma da Android 5.1 (Livello API 22), Android ha iniziato a supportare più SIM. Maggiori dettagli su Android Documentation

di riferimento di questa Original Answer

8

ci sono 3 diverse categorie ...

  1. funzionalità supportate e documentati
  2. funzioni disponibili e poco documentato
  3. funzionalità non disponibili

Quindi le funzionalità dual sim sono disponibili ma non documentate e quindi non ufficialmente supportate.

Detto questo, non significa che non sarà utilizzabile. Significa solo che Android (o, per questo, google o persino produttore) non è in grado di supportare la funzionalità delle tue app.

Ma potrebbe funzionare, ad esempio i contatti sono simili.

Si potrebbe quindi chiedere come tutti dovrebbero sapere le funzionalità se nel caso non è documentato .. Ehi android è open source .. vai a cercare nel codice e trovalo per te. Questo è quello che immagino siano gli sviluppatori di sim sim.

+0

Ho avuto un attento sguardo attraverso la fonte, nella misura in cui sono stato in grado (ho detto che nel mio primo post, ma non molto prominente). Se qualcuno lo ha fatto e ha avuto più fortuna, sarei felice di sentirlo. –

+0

È possibile utilizzare il reflection Java per ottenere informazioni dual SIM. [Vedi qui è demo] (http://stackoverflow.com/a/17499889/703851) –

+1

@GauravShah, quindi comunque ... come inviare scegliere SIM 1/2 durante l'invio degli sms tramite il codice? – gumuruh

-1
<receiver 
    android:name=".SimChangedReceiver" 
    android:enabled="true" 
    android:process=":remote" > 
    <intent-filter> 
     <action android:name="android.intent.action.SIM_STATE_CHANGED" /> 
    </intent-filter> 
    <intent-filter> 
     <action android:name="android.intent.action.BOOT_COMPLETED" /> 
    </intent-filter> 
</receiver> 

SimChangedReceiver class 

public class SimChangedReceiver extends BroadcastReceiver { 

public void onReceive(Context context, Intent intent) { 
    String action = intent.getAction(); 
    if (action.equalsIgnoreCase("android.intent.action.SIM_STATE_CHANGED")) { 
     Log.d("SimChangedReceiver", "--> SIM state changed <--"); 

     //   do code whatever u want to apply action    // 

    } 
    } 
} 

questo è lavoro per dual sim anche, e non c'è bisogno di chiamare questo ricevitore perché verrà eseguito in remoto

7

È possibile utilizzare MultiSim libreria per i dettagli ottenere da dispositivi multi-sim.

Availbale informazioni da ogni sim card: imei, IMSI, numero di sim di serie, lo stato sim, codice operatore sim, sim nome dell'operatore, sim ISO Paese, codice operatore di rete, la rete nome dell'operatore, Rete Operativa ISO, tipo tetwork, rete roaming.

Basta aggiungere libreria dipendenze Gradle in App build.gradle:

dependencies { 
    compile 'com.kirianov.multisim:multisim:[email protected]' 
} 

Non dimenticate aggiungere il permesso richiesto in AndroidManifest.xml:

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

Usa codice simile nel codice:

MultiSimTelephonyManager multiSimTelephonyManager = new MultiSimTelephonyManager(this); 
// or 
MultiSimTelephonyManager multiSimTelephonyManager = new MultiSimTelephonyManager(this, new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
    updateInfo(); 
    } 
}); 


public void updateInfo() { 

    // for update UI 
    runOnUiThread(new Runnable() { 
    @Override 
    public void run() { 
     multiSimTelephonyManager.update(); 
     useInfo(); 
    } 
    } 

    // for update background information 
    multiSimTelephonyManager.update(); 
    useInfo(); 
} 

public void useInfo() { 

    // get number of slots: 
    if (multiSimTelephonyManager != null) { 
    multiSimTelephonyManager.sizeSlots(); 
    } 

    // get info from each slot: 
    if (multiSimTelephonyManager != null) { 
    for(int i = 0; i < multiSimTelephonyManager.sizeSlots(); i++) { 
     multiSimTelephonyManager.getSlot(i).getImei(); 
     multiSimTelephonyManager.getSlot(i).getImsi(); 
     multiSimTelephonyManager.getSlot(i).getSimSerialNumber(); 
     multiSimTelephonyManager.getSlot(i).getSimState(); 
     multiSimTelephonyManager.getSlot(i).getSimOperator(); 
     multiSimTelephonyManager.getSlot(i).getSimOperatorName(); 
     multiSimTelephonyManager.getSlot(i).getSimCountryIso(); 
     multiSimTelephonyManager.getSlot(i).getNetworkOperator(); 
     multiSimTelephonyManager.getSlot(i).getNetworkOperatorName(); 
     multiSimTelephonyManager.getSlot(i).getNetworkCountryIso(); 
     multiSimTelephonyManager.getSlot(i).getNetworkType(); 
     multiSimTelephonyManager.getSlot(i).isNetworkRoaming(); 
    } 
    } 
} 

// or for devices above android 6.0 
MultiSimTelephonyManager multiSimTelephonyManager = new MultiSimTelephonyManager(MyActivity.this, broadcastReceiverChange); 

Usage: 
// get info about slot 'i' by methods: 
multiSimTelephonyManager.getSlot(i). 

Force update info 
// force update phone info (needed on devices above android 6.0 after confirm permissions request) 
multiSimTelephonyManager.update(); 

Handle of permissions request (6.0+) 
// in YourActivity for update info after confirm permissions request on devices above android 6.0 
@Override 
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
    super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
    if (multiSimTelephonyManager != null) { 
     multiSimTelephonyManager.update(); 
    } 
}