2013-05-27 2 views
5

Как я могу запустить основной диалог разговора по андроиду и sms из моей собственной деятельности? Лучший ответ я нашел до сих пор было:Открытие основного разговора SMS-сообщений на андроиде

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

И я думаю, что он даже работал, когда я запускаю этот код на одном из устройств, но теперь я получаю следующее сообщение об ошибке:

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 

Примечание : Мне не интересно открывать экран компоновщика sms/mms для отправки смс, но основной экран sms, где хранятся все полученные сообщения sms/mms.

ответ

0

Добавьте эти разрешения в файле манифеста

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

Надеется, что это помогает

+0

Я не думаю, что вы должны добавить все эти разрешения только открыть основные MMS/SMS разговора намерения. Тем не менее я добавил недостающие в свой файл манифеста и все еще получаю сообщение об ошибке Permission Denial. Может быть, это связано с тем, что некоторые устройства не могут получить доступ к com.android.mms.ui.ConversationList? – MikeL

+0

не работает на S3 –

3

В Galaxy S3 и S4, мы должны использовать intent.setClassName ("com.android.mms", «com.android .mms.ui.ConversationComposer ");

3

С помощью Fresher ответа я получил это работает, вот код, я использую:

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; 
    } 
Смежные вопросы