2013-05-27 15 views
5

Come posso avviare un intento di conversazione principale di android mms/sms dalla mia attività? La risposta migliore che ho trovato fino ad ora è stato:Apertura dell'intenzione della conversazione SMS principale su Android

Intent intent = new Intent(Intent.ACTION_MAIN); 
intent.addCategory(Intent.CATEGORY_LAUNCHER); 
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
intent.setClassName("com.android.mms", "com.android.mms.ui.ConversationList"); 
context.startActivity(intent); 

E penso che anche lavorato quando si esegue questo codice su uno dei dispositivi, ma ora ricevo il seguente errore:

Permission Denial: starting Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.android.mms/.ui.ConversationList } from ProcessRecord{460a37f8 6949:msc.test/10081} (pid=6949, uid=10081) requires null 

Nota : Non sono interessato ad aprire la schermata del compositore sms/mms per inviare l'sms, ma la schermata principale degli sms in cui sono memorizzati tutti i messaggi sms/mms arrivati.

risposta

0

Aggiungi queste autorizzazioni nel file manifesto

<uses-permission android:name="android.permission.READ_CONTACTS" /> 
    <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
    <uses-permission android:name="android.permission.SEND_SMS" /> 
    <uses-permission android:name="android.permission.RECEIVE_SMS" /> 
    <uses-permission android:name="android.permission.READ_SMS" /> 
    <uses-permission android:name="android.permission.WRITE_SMS" /> 
    <uses-permission android:name="android.permission.RECEIVE_MMS" /> 

Spero che questo aiuti

+0

Non credo che si dovrebbe aggiungere tutti quei permessi solo per aprire il principale MMS/SMS conversazione intento. Tuttavia ho aggiunto quelli mancanti al mio file manifest e ottengo ancora l'errore Permission Denial. Forse è perché alcuni dispositivi non possono accedere a com.android.mms.ui.ConversationList? – MikeL

+0

non funziona su S3 –

3

in Galaxy S3 e S4, dovremmo usare intent.setClassName ("com.android.mms", "com.android .mms.ui.ConversationComposer ");

3

Con l'aiuto di risposta più fresca ho ottenuto che funziona, ecco il codice che uso:

private boolean tryOpenSMSConversation(){ 
     boolean isWorking = false; 
     Intent intent = new Intent(Intent.ACTION_MAIN); 
     // DEFAULT ANDROID DEVICES 
     intent.setComponent(new ComponentName("com.android.mms", 
       "com.android.mms.ui.ConversationList")); 
     isWorking = tryActivityIntent(this, intent); 
     if (!isWorking) { 
      // SAMSUNG DEVICES S3|S4|NOTE 2 etc. 
      intent.setComponent(new ComponentName("com.android.mms", 
        "com.android.mms.ui.ConversationComposer")); 
      isWorking = tryActivityIntent(this, intent); 
     } 
     if (!isWorking) { 
      // OPENS A NEW CREATE MESSAGE 
      intent = new Intent(Intent.ACTION_MAIN); 
      intent.setType("vnd.android-dir/mms-sms"); 
      isWorking = tryActivityIntent(this, intent); 
     } 
     if (!isWorking) { 
      // TODO try something else 
     } 
     return isWorking; 
    } 

    public static boolean tryActivityIntent(Context context, 
      Intent activityIntent) { 

     // Verify that the intent will resolve to an activity 
     try { 
      if (activityIntent.resolveActivity(context.getPackageManager()) != null) { 
       context.startActivity(activityIntent); 
       return true; 
      } 
     } catch (SecurityException e) { 
      return false; 
     } 
     return false; 
    }