Android 4.0 пользовательские уведомления, такие как Google Music - PullRequest
5 голосов
/ 03 января 2012

Я хочу создать пользовательское уведомление с индикатором выполнения и кнопкой удаления.

Скриншот:

enter image description here

Мне удалось создать пользовательское уведомление с индикатором выполнения, но мне не удалось создать событие удаления. Я хочу отменить уведомление и остановить загрузку, как только пользователь нажмет на «х» (как в музыке Google, поэтому я не хочу начинать действие, чтобы удалить уведомление).

Вот мой рабочий код:

    notificationManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE);

    int icon = R.drawable.ic_launcher;
    CharSequence tickerText = "Hello";
    long when = System.currentTimeMillis();

    notification = new Notification(icon, tickerText, when);    


    CharSequence contentTitle = "My notification";
    CharSequence contentText = "Hello World!";
    Intent notificationIntent = new Intent(context, UploadEventsReceiver.class);
    PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0);

    notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
    notification.contentView = new RemoteViews(context.getPackageName(), R.layout.upload_progress);
    notification.contentView.setOnClickPendingIntent(R.id.text, contentIntent);

    notificationManager.notify(this.notificationId, notification);

На линии

Intent notificationIntent = new Intent(context, UploadEventsReceiver.class);

Я пробовал с приемником BroadCast без «широковещания», но я не знаю, является ли это правильным способом, и мне не удалось заставить его работать. Что я должен использовать и как его использовать?

Ответы [ 2 ]

5 голосов
/ 03 января 2012

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

RemoteViews remoteViews = new RemoteViews(widgetPackage, R.layout.widget);
Intent action = new Intent(context, Your_cancel_broadcast.class);
action.setAction(CANCEL_BROADCAST_ACTION);
actionPendingIntent = PendingIntent.getBroadcast(context, 0, action, 0);
remoteViews.setOnClickPendingIntent(R.id.your_x_btn, actionPendingIntent);

и создайте трансляцию, которая получит CANCEL_BROADCAST_ACTION и остановит то, что вы хотите, и отмените это уведомление.

0 голосов
/ 24 апреля 2012

Кроме того, я думаю (согласно документации), что ваш метод устарел.

Вы должны использовать что-то вроде:

Notification.Builder builder = new Notification.Builder(context);
builder.setContentTitle("Your notification title");
builder.setContentText("Your notification text");
builder.setSmallIcon(R.drawable.ic_your_icon);
builder.setContentIntent(yourIntent);
notificationManager.notify(null, YOUR_UNIQUE_NOTIFICATION_ID, builder.getNotification());

http://developer.android.com/reference/android/app/NotificationManager.html

http://developer.android.com/reference/android/app/Notification.Builder.html

...