Ограничение уведомлений об износе Android

На носимом устройстве я вижу, что оно может отображать только 12 уведомлений для каждого приложения. Например, когда я получаю около 20 новых электронных писем, приложение Wear показывает только последние 12 электронных писем и не более того.

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

Это ограничение износа Google для Android?

Вот мой код..

PhoneDataListener, который получает элементы данных из мобильного приложения.

public class PhoneDataListenerService extends WearableListenerService {
    private static final String TAG = "Listener-W";


    @Override
    public void onDataChanged(DataEventBuffer dataEvents) {


        for (DataEvent event : dataEvents) {
            Log.v(TAG, "DataMap received on watch: " + DataMapItem.fromDataItem(event.getDataItem()).getDataMap());
            // Check the data type
            if (event.getType() == DataEvent.TYPE_CHANGED) {
                // Check the data path
                String path = event.getDataItem().getUri().getPath();
                if (path.equals("/weardatapath")) {}
                DataMapItem dataMapItem = DataMapItem.fromDataItem(event.getDataItem());
                ArrayList<DataMap> dataItemsList = dataMapItem.getDataMap().getDataMapArrayList
                        ("dataMapItems");
                // Broadcast DataMap contents to wearable show in notification..
                if (dataItemsList != null && dataItemsList.size() > 0) {
                    // start service for each Item in the dataItemsList
                    for (DataMap dMapItem : dataItemsList) {
                        startNotificatioService(this, dMapItem);
                    }
                }
            }
        }
    }

    public static void startNotificatioService(Context context, DataMap dataMap) {
        Log.w(TAG, "start Service to show notification...");
        Intent intent = new Intent(context, NotificationService.class);
        intent.setAction(NotificationService.ACTION_NOTIFICATION);
        intent.putExtra(NotificationService.DATA_PARAM, dataMap.toBundle());
        context.startService(intent);
    }
}

NotificationService в приложении износа, которое создает и выдает уведомление

public class NotificationService extends IntentService {

    private final static String TAG = "NotificationService-W";

    public static final String ACTION_NOTIFICATION = "com.test.phonewearsample.action.NOTIFIY";
    public static final String DATA_PARAM = "dataMap";
    private final static String MY_GROUP_KEY = "myGroupKey";

    public NotificationService() {
        super("NotificationService");
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        if (intent != null) {
            final String action = intent.getAction();
            if (ACTION_NOTIFICATION.equals(action)) {
                final Bundle data = intent.getBundleExtra(DATA_PARAM);
                handleActionNotification(data);
            }
        }
    }

    private void handleActionNotification(Bundle data) {
        // Display received data in UI

        int dataId = data.getInt(SharedConstants.EXTRA_MAIL_ID);
        Log.w(TAG, "###########DataItems############# :"+dataId);
        String name = data.getString(SharedConstants.WearMails.CONTACT_NAME);
        String number = data.getString(SharedConstants.WearMails.PHONE_NUMBER);
        String duration = data.getString(SharedConstants.WearMails.DURATION);
        Long uniqueVal = data.getLong(SharedConstants.EXTRA_UNIQUE_ID);

        NotificationCompat.BigTextStyle style = new NotificationCompat.BigTextStyle();
        style.bigText(number + "\n" + duration);


        NotificationCompat.Builder notification = new NotificationCompat.Builder(this)
                .setStyle(style)
                .setContentTitle(name)
                .setSmallIcon(R.mipmap.ic_launcher)
                .addAction(R.mipmap.ic_launcher, "Play On Phone",
                        NotificationUtil.getReplyPendingIntent(this, Integer.toString(dataId)))
                .setGroup(MY_GROUP_KEY)
                .setVibrate(new long[]{0, 100, 50, 100}) 
                .setSortKey(Long.toString(uniqueVal));

        NotificationManagerCompat.from(this).notify(dataId, notification.build());
    }
}

Обратите внимание, что одновременно может отображаться только 12 уведомлений для группы. Как только я выполняю действие и уведомление очищается, появляется ожидающее уведомление.


person Android_dev_new    schedule 21.01.2016    source источник
comment
Если все в порядке, можете ли вы опубликовать код?   -  person ap6491    schedule 21.01.2016
comment
Вам нужен полный код или только часть, где я создаю и выбрасываю уведомление?   -  person Android_dev_new    schedule 21.01.2016
comment
Просто та часть, где вы строите уведомление, должна быть хорошей. Спасибо.   -  person ap6491    schedule 21.01.2016
comment
Я отредактировал свой вопрос и добавил код.   -  person Android_dev_new    schedule 21.01.2016
comment
Я не знаю об ограничениях, но это то, что вы хотите? В любом случае, может быть лучше объединить уведомления в одно.   -  person DeeV    schedule 21.01.2016
comment
Мои требования примерно такие: если я получаю 20 новых писем от разных контактов на своем мобильном телефоне, я хотел бы показывать на износе как 20 новых писем, а не только 12 новых писем, что дает пользователю неверную информацию.   -  person Android_dev_new    schedule 21.01.2016


Ответы (1)


Читая об этом, я думаю, что это дефект устройств Android Wear, над которыми сейчас работает Google. Вот ссылка, которую вы можете посмотреть: https://code.google.com/p/android/issues/detail?id=130689. Я думаю, что эта проблема связана с носимыми устройствами.

person ap6491    schedule 21.01.2016