2013-05-27 16 views
5

Jak mogę uruchomić główną rozmowę na temat androida/sms'a z mojej własnej aktywności? Najlepszą odpowiedzią znalazłem do tej pory było:Otwarcie głównej intencji konwersacji SMS na Androidzie

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); 

I myślę, że nawet pracował kiedy uruchomić ten kod na jednym z urządzeń, ale teraz pojawia się następujący błąd:

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 

Note : Nie interesuje mnie otwarcie ekranu sms/mms composer, aby wysłać sms, ale główny ekran sms, w którym przechowywane są wszystkie otrzymane wiadomości sms/mms.

Odpowiedz

0

Dodaj te uprawnienia w pliku manifestu

<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" /> 

nadzieję, że to pomaga

+0

Nie sądzę, że należy dodać wszystkie te uprawnienia po prostu otworzyć główne MMS/SMS rozmowy intencji. Niemniej jednak dodałem brakujące do mojego pliku manifestu i nadal otrzymuję błąd Odmowa zezwolenia. Może dlatego, że niektóre urządzenia nie mają dostępu do com.android.mms.ui.ConversationList? – MikeL

+0

nie działa na S3 –

3

W Galaxy S3 i S4, powinniśmy używać intent.setClassName ("com.android.mms", „com.android .mms.ui.ConversationComposer ");

3

Z pomocą świeższe odpowiedź mam to działa, tutaj jest kod używam:

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; 
    } 
Powiązane problemy