Серые кнопки при добавлении действий к уведомлениям в желе Bean

Я добавляю две кнопки к уведомлению в своем приложении, которое настроено на целевой уровень API 8. Проблема состоит в том, что две кнопки отображаются как две большие серые кнопки, совершенно неулокальные с остальными уведомлениями. Я тестировал его как на Nexus 7, так и на Galaxy Nexus.

enter image description here

Все примеры, которые я видел, имеют красивые черные кнопки, такие как уведомление о входящем вызове: http://www.androidng.com/wp-content/uploads/2012/07/android-jelly-bean-notifications.jpeg

Я бы предположил, что это будет легко, но сегодня такой удачи не бывает. Кто-нибудь знает, где я, возможно, ошиблась? Ниже приведен фрагмент моего кода, который генерирует уведомление с последней библиотекой поддержки.

NotificationManager nm = (NotificationManager) this
            .getSystemService(Context.NOTIFICATION_SERVICE);
android.support.v4.app.NotificationCompat.Builder builder = new android.support.v4.app.NotificationCompat.Builder(this);
    builder.setContentIntent(contentIntent)
                .setSmallIcon(R.drawable.ic_stat_radio)                
                .setContentTitle(message)
                .setTicker(message) 
                .setPriority(android.support.v4.app.NotificationCompat.PRIORITY_HIGH)
                .setWhen(System.currentTimeMillis())
                .setAutoCancel(false)                   
                .addAction(android.R.drawable.ic_btn_speak_now, "Play", contentIntent)
                .addAction(android.R.drawable.ic_dialog_map, "Stop", contentIntent)
                .setContentText(message);

    Notification n = builder.build();

    //nm.notify(0, n);
    startForeground(1, n);

Ответ 1

Итак, это происходит потому, что ваш targetSdk в вашем AndroidManifest.xml равен < 11.

Я считаю, что изменение совместимости, которое происходит, когда вы нацеливаете 11, - это тема по умолчанию, потому что Holo. Поскольку ваша (и моя) цель меньше 11, она прибегает к какой-то теме совместимости, которую она применяет на этих кнопках, даже если она не должна. Я предполагаю, что даже если ваше приложение/активность установлено на Holo, оно фактически не применяется к уведомлению, поскольку они находятся в другом процессе.

Это просто моя догадка. Используя демонстрацию уведомлений CommonsWare и просто измените targetSdk, вы увидите это поведение.

Ответ 2

Im имеет ту же проблему, используя Android studio (0.8.11) с Gradle (0.13.0)

compileSdkVersion 20
buildToolsVersion "20.0"

defaultConfig {
        applicationId "x.xx.xxxxxx"
        minSdkVersion 10
        targetSdkVersion 20
        versionCode x
        versionName "x.xx"
    }

Решите его, добавив uses-sdk в Manifest

<uses-sdk
        android:minSdkVersion="10"
        android:targetSdkVersion="20" />

Я знаю, что значение Manifest будет переопределено значением Gradle. но это решить.