2014-09-23 5 views
1

Im пытается отправить mms из моего приложения. Я сделал это приложение для обмена сообщениями по умолчанию с помощью руководства для разработчиков Android (http://android-developers.blogspot.com/2013/10/getting-your-sms-apps-ready-for-kitkat.html).Отправка mms в android 4.4

Мой манифест:
BroadcastReceiver что прослушивает входящие SMS-сообщения:

<receiver android:name="com.test.SmsReceiver" 
     android:permission="android.permission.BROADCAST_SMS"> 
     <intent-filter> 
      <action android:name="android.provider.Telephony.SMS_DELIVER" /> 
     </intent-filter> 
    </receiver> 

BroadcastReceiver что прослушивает входящие MMS-сообщения

<receiver android:name="com.test.MmsReceiver" 
     android:permission="android.permission.BROADCAST_WAP_PUSH"> 
     <intent-filter> 
      <action android:name="android.provider.Telephony.WAP_PUSH_DELIVER" /> 
      <data android:mimeType="application/vnd.wap.mms-message" /> 
     </intent-filter> 
    </receiver> 

Service, которая обеспечивает доставку сообщений с телефона быстрого ответа

<service android:name="com.test.HeadlessSmsSendService" 
     android:permission="android.permission.SEND_RESPOND_VIA_MESSAGE" 
     android:exported="true" > 
     <intent-filter> 
      <action android:name="android.intent.action.RESPOND_VIA_MESSAGE" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
      <data android:scheme="sms" /> 
      <data android:scheme="smsto" /> 
      <data android:scheme="mms" /> 
      <data android:scheme="mmsto" /> 
     </intent-filter> 
    </service> 

NewMmsActivity активность, что позволяет пользователю отправлять новые SMS/MMS сообщения:

<activity android:name="com.test.NewMmsActivity" 
     android:configChanges="keyboard|keyboardHidden|locale|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" 
     android:label="@string/app_name" 
     android:launchMode="singleTop" 
     android:screenOrientation="portrait"> 
     <intent-filter> 
      <action android:name="android.intent.action.SEND" /> 
      <action android:name="android.intent.action.SENDTO" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
      <category android:name="android.intent.category.BROWSABLE" /> 
      <data android:scheme="sms" /> 
      <data android:scheme="smsto" /> 
      <data android:scheme="mms" /> 
      <data android:scheme="mmsto" /> 
     </intent-filter> 
    </activity> 

Но когда я пытаюсь в NewMmsActivity отправить MMS-то не работает, и вместо того, чтобы диалог открыт, как это:

enter image description here

КОД:

Intent mmsIntent = new Intent(Intent.ACTION_SEND); 
    mmsIntent.putExtra("sms_body", "text"); 
    mmsIntent.putExtra("address", "99999999"); 
    mmsIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(fileString))); 
    mmsIntent.setType("image/jpeg"); 
    startActivity(mmsIntent); 

Если я использую Intent.ACTION_SENDTO, ничего не происходит. Намерение начинается без проблем, но ничего не происходит.

Что мне не хватает? Любые идеи были бы хорошы!

+0

Не могли бы вы расшифровать «не работает». Вы получаете ошибки? Изображение не отображается? – RyPope

+0

@RyPope: ничего не происходит. Начинается запуск, но ничего не отправляется. – Ado

+0

Хорошо, попробуйте ответить – RyPope

ответ

0

Самый простой способ я нашел для отправки ммс является библиотека андроид-smsmms здесь: https://github.com/klinker41/android-smsmms

Для подъемы ММСК, прокси и порт я использовал:

final Cursor apnCursor = SqliteWrapper.query(mContext, this.mContext.getContentResolver(), 
       Uri.withAppendedPath(Telephony.Carriers.CONTENT_URI, "current"), APN_PROJECTION, null, null, null); 
     String type = null; 
     if (apnCursor.moveToFirst()) { 
      do { 
       type = apnCursor.getString(3); 
       if(type.equals("default,supl,mms") || 
         type.equals("mms")) { 
        mmsc = apnCursor.getString(0); 
        proxy = apnCursor.getString(1); 
        port = apnCursor.getString(2); 
}while (apnCursor.moveToNext()); 

В случае петли я проверка, если APN имеет Данные MMS, которые мне нужны, в противном случае переходят к следующему.

+0

Как вы получаете Mmsc, порт и прокси от android? – Mariusz

+0

@Mariusz Я отредактировал ответ на ваш вопрос. – Ado

+0

Как вы получаете доступ к hiden class 'SqlliteWrapper'? Я пытаюсь сделать это с помощью 'ContentResolver', но только я получаю _Caused: java.lang.SecurityException: нет разрешения на запись настроек APN: ни у пользователя 10656, ни у текущего процесса нет android.permission.WRITE_APN_SETTINGS._ – Mariusz

0

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

mmsIntent.setType("*/*"); 
+0

Не работает. Я также попытался перейти с ACTION_SEND на ACTION_SENDTO, потому что ACTION_SEND открывает диалог выбора и ничего не происходит. – Ado

+0

Как ничто не отображается в диалоговом окне? – RyPope

+0

Я отредактировал вопрос, пожалуйста, перепроверяйте. Спасибо. – Ado

1

В приложении по умолчанию, ваш отвечает за отправку MMS сам, не открывая другое приложение, чтобы сделать так, что это то, что делает ваш код. В настоящее время Android не имеет простого API для MMS, как и для SMS. Кроме того, это очень плохо документированный аспект структуры, и количество кода и объяснений, необходимых для его реализации, выходит за рамки стека переполнения. Вы можете проверить исходный код родного приложения для руководства, но имейте в виду, что это нетривиальная задача, поскольку приложение по умолчанию отвечает за все, что необходимо для обработки MMS, включая транзакции отправки, получения и контент-провайдера.

+0

Но зачем были схемы вроде «mmsto:» и т. Д. Если это невозможно? – Ado

+0

Я не сказал, что это невозможно, просто это не тривиально, и ваше приложение должно будет с ним справиться, поэтому ваша «NewMmsActivity» включает эту схему в свой '' target-filter> '. –

+0

Эта страница блога (которая почти все ссылается на попытку обновления SMS-приложений для KitKat) довольно вводит в заблуждение, поскольку в ней не упоминается, что операции с MMS никогда не были легко реализованы в Android, хотя любое приложение, предназначенное для использования по умолчанию, должно обрабатывать их. –

Смежные вопросы