2015-03-04 1 views
0

Приложение My Sms не сохраняет sms на устройстве, хотя я уже установил его как сообщение по умолчанию. Мне нужно поддержать андроид-pre-kitkat, поэтому я немного научился и имел 2 BroadcastReceiver, которые имеют одинаковый контент, но другое имя. Метод onReceive() работает нормально, но как только я выхожу из приложения и вхожу в него, смс исчезает. Я проверил в биржевых сообщениях, но нет никаких смс. Я не могу понять, в чем проблемаSms не сохраняет на Kitkat 4.4 <Уже настроено как приложение для обмена сообщениями по умолчанию>

Мои Androidmanifest:

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE xml> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
android:versionCode="1" 
android:versionName="1.0" > 

<uses-sdk 
    android:minSdkVersion="16" 
    android:targetSdkVersion="21" /> 

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

<application 
    android:allowBackup="true" 
    android:icon="@drawable/icon_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name=".SmsActivity" 
     android:label="@string/app_name" 
     android:uiOptions="splitActionBarWhenNarrow" > 
     <meta-data 
      android:name="android.support.UI_OPTIONS" 
      android:value="splitActionBarWhenNarrow" /> 

     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

    <receiver 
     android:name=".NewSmsBroadcastReceiver" 
     android:permission="android.permission.BROADCAST_SMS" > 
     <intent-filter> 
      <action android:name="android.provider.Telephony.SMS_DELIVER" /> 
     </intent-filter> 
    </receiver> 
    <receiver android:name=".SmsBroadcastReceiver" > 
     <intent-filter> 
      <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
     </intent-filter> 
    </receiver> 
    <receiver 
     android:name=".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> 

    <activity android:name=".SendActivity" > 
     <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> 

    <service 
     android:name=".HeadlessSmsSendService" 
     android:exported="true" 
     android:permission="android.permission.SEND_RESPOND_VIA_MESSAGE" > 
     <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> 

    <activity 
     android:name=".SendActivity" 
     android:label="@string/app_name" 
     android:parentActivityName=".SmsActivity" > 
     <meta-data 
      android:name="android.support.PARENT_ACTIVITY" 
      android:value="com.wyrmise.melriss.SmsActivity" /> 
    </activity> 
    <activity 
     android:name=".ThreadActivity" 
     android:label="@string/title_activity_thread" > 
     <meta-data 
      android:name="android.support.PARENT_ACTIVITY" 
      android:value="com.wyrmise.melriss.SmsActivity" /> 
    </activity> 
</application> 

</manifest> 

BroadcastReceiver приложение SMS

public class SmsBroadcastReceiver extends BroadcastReceiver { 

public static final String SMS_BUNDLE = "pdus"; 

public void onReceive(Context context, Intent intent) { 
    Bundle intentExtras = intent.getExtras(); 
    if (intentExtras != null) { 
     Object[] sms = (Object[]) intentExtras.get(SMS_BUNDLE); 
     String address = ""; 
     String smsBody = ""; 

     for (int i = 0; i < sms.length; ++i) { 
      SmsMessage smsMessage = SmsMessage 
        .createFromPdu((byte[]) sms[i]); 
      smsBody = smsMessage.getMessageBody().toString(); 
      address = smsMessage.getOriginatingAddress(); 
     } 

     Message msg = new Message(); 
     msg.messageNumber=address; 
     msg.messageContent=smsBody; 
     SimpleDateFormat hours = new SimpleDateFormat("h:mm a", 
       Locale.US); 
     msg.messageDate=hours.format(new Date()); 

     SmsActivity inst = SmsActivity.instance(); 
     inst.pushNotification(msg); 
     inst.updateList(msg); 
    } 
} 
} 

ответ

3

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

ContentValues values = new ContentValues(); 
values.put(Sms.ADDRESS, address); 
values.put(Sms.BODY, smsBody); 
context.getContentResolver().insert(Sms.CONTENT_URI, values); 
+1

'ContentValues ​​values ​​= new ContentValues ​​(); \t \t \t values.put ("адрес", адрес); \t \t \t values.put ("date", System.currentTimeMillis() + ""); \t \t \t values.put ("read", "1"); \t \t \t values.put ("type", "1"); \t \t \t values.put ("body", smsBody); \t \t \t Uri uri = Uri.parse ("content: // sms /"); \t \t \t context.getContentResolver() вставить (Ури значения);. ' Я просто добавил в обоих BroadcastReceiver, но это все тот же –

+1

Вы _sure_ приложение выбрано в качестве значения по умолчанию? То есть вы выбрали «да» в диалоговом окне подтверждения. Кроме того, вы вручную проверили собственное приложение для сообщения? Когда ваш по умолчанию, родное приложение не собирается выдавать уведомления для входящих сообщений. –

+0

Мне жаль, что я экспортировал проект в apk перед сохранением файла, так что он все еще является старой версией. Будут проверять его, когда я получу устройство, спасибо. –

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

  • Нет связанных вопросов^_^