2013-11-23 1 views
6

Я работаю над приложением SMS. Все было гладко до вчерашнего дня, когда я обновил свой Nexus 4 до Android 4.4, KitKat. Такие функции, как маркировка SMS как прочитанных/непрочитанных и удаление всех сообщений в потоке, перестали работать. Почему это происходит? Он работает на других устройствах Samsung (не работает KitKat).Маркировка SMS-сообщений как прочитанных/непрочитанных или удаленных сообщений, не работающих в KitKat

Это мой код, чтобы пометить сообщение как прочитанное или непрочитанное:

public static void markRead(final Context context, final Uri uri, 
      final int read) { 
     Log.d(TAG, "markRead(" + uri + "," + read + ")"); 
     if (uri == null) { 
      return; 
     } 
     String[] sel = Message.SELECTION_UNREAD; 
     if (read == 0) { 
      sel = Message.SELECTION_READ; 
     } 
     final ContentResolver cr = context.getContentResolver(); 
     final ContentValues cv = new ContentValues(); 
     cv.put(Message.PROJECTION[Message.INDEX_READ], read); 
     try { 
      cr.update(uri, cv, Message.SELECTION_READ_UNREAD, sel); 
     } catch (IllegalArgumentException e) { 
      Log.e(TAG, "failed update", e); 
      Toast.makeText(context, e.getMessage(), Toast.LENGTH_LONG).show(); 
     } 
} 

Для удаления всех сообщений в теме, я использую:

public static void deleteMessages(final Context context, final Uri uri, 
      final int title, final int message, final Activity activity) { 

     Log.i(TAG, "deleteMessages(..," + uri + " ,..)"); 
     final Builder builder = new Builder(context); 
     builder.setTitle(title); 
     builder.setMessage(message); 
     builder.setNegativeButton(android.R.string.no, null); 
     builder.setPositiveButton(android.R.string.yes, 
       new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(final DialogInterface dialog, 
          final int which) { 
         final int ret = context.getContentResolver().delete(
           uri, null, null); 
         Log.d(TAG, "deleted: " + ret); 
         if (activity != null && !activity.isFinishing()) { 
          activity.finish(); 
         } 
         if (ret > 0) { 
          Conversation.flushCache(); 
          Message.flushCache(); 
          SmsReceiver.updateNewMessageNotification(context, 
            null); 
          // adapter.notifyDataSetChanged(); 
         } 
         try { 
          testFromFragment(context); 
         } catch (Exception e) { 
          e.printStackTrace(); 
         } 
        } 
       }); 
     builder.show(); 
} 
+0

http://www.youtube.com/watch?v=mdq0R2WQssQ http://android-developers.blogspot.in/2013/10/getting-your-sms-apps-ready-for-kitkat. html http://developer.android.com/about/versions/android-4.4.html#SMS Ссылка на youtube была очень полезной для меня – playmaker420

ответ

16

С Android 4.4, несколько вещей, которые изменились в отношении СМС. Среди них заключается тот факт, что только приложение, зарегистрированное в качестве стандартного SMS-приложения, имеет доступ на запись к провайдеру.

Check here для короткой рекламы на изменение SMS.

Check this link для более глубокого изучения. В этом объясняется, к какому критерию подходит ваше приложение, чтобы быть стандартным приложением для обмена сообщениями.

And here's официальный забавный материал.

Итак, если ваше приложение не является приложением по умолчанию, это значит, что указанные функции перестали работать.


Возможный способ обхода для ограничения по умолчанию провайдера можно найти в answer here.