如何发布没有图标但启用了led的通知?

时间:2013-08-12 17:06:36

标签: android android-notifications android-notification-bar

嗨其他Android编码员!

我正在编写一个应用程序,它使用新的Android 4.3通知监听器在收到通知时更改通知指示颜色,并且遇到问题,可能是由于我对通知的工作方式缺乏了解。

到目前为止,它运作良好。当用户关闭屏幕时,我使用自定义LED颜色创建通知,并在屏幕打开时将其删除。我的问题是,当用户重新打开屏幕时,他可以在删除之前在状态栏上看到我的通知图标半秒钟。这不是什么大不了的事,但作为挑剔者,我忍不住想办法避免这种丑陋行为。我知道有些应用程序会成功这样做 - 例如LightFlow。

我的第一个想法是使用通知的优先级并使用Notification.PRIORITY_MIN几乎工作:通知图标不会显示在状态栏上,但会在栏展开时显示。

我很遗憾地发现,当屏幕关闭时,优先级最低的通知不会切换通知!

然后我尝试创建一个没有图标的通知,但框架不支持它 - 这实际上是一件好事。

现在我不在乎。

有人可以帮助我找到一种方法来创建状态栏上没有显示但仍会切换LED的通知吗?

或者我可能应该在屏幕实际开启之前删除我的通知,但我找不到办法做到这一点......

如果有人可以帮助我,这将是我的一天!

以下是我的应用程序的代码源:

主要活动:

package com.nightlycommit.coloration;

import android.app.Activity;
import android.os.Bundle;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
}

服务监听器

package com.nightlycommit.coloration;

import android.content.BroadcastReceiver;
import android.content.Intent;
import android.content.IntentFilter;
import android.service.notification.StatusBarNotification;

/**
 * Created by Eric on 08/08/13.
 */
public class NotificationListenerService extends android.service.notification.NotificationListenerService {
    private final String TAG = getClass().getSimpleName();

    @Override
    public void onCreate() {
        super.onCreate();

        // REGISTER RECEIVER THAT HANDLES SCREEN ON AND SCREEN OFF LOGIC
        IntentFilter filter = new IntentFilter();
        filter.addAction(Intent.ACTION_SCREEN_ON);
        filter.addAction(Intent.ACTION_SCREEN_OFF);

        BroadcastReceiver mReceiver = new ScreenStateReceiver();
        registerReceiver(mReceiver, filter);
    }

    @Override
    public void onNotificationPosted(StatusBarNotification sbn) {
        String text = "Notification posted !";
    }

    @Override
    public void onNotificationRemoved(StatusBarNotification sbn) {
        String text = "Notification removed !";
    }
}

屏幕状态接收器:

package com.nightlycommit.coloration;

import android.app.Notification;
import android.app.NotificationManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;

/**
 * Created by Eric on 12/08/13.
 */
public class ScreenStateReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        NotificationManager notificationManager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
        String action = intent.getAction();

        if (action != null) {
            if (action.equals(Intent.ACTION_SCREEN_OFF)) {
                Notification.Builder builder = new Notification.Builder(context);

                builder.setLights(Color.argb(255,255,0,0), 500, 500);
                builder.setContentText("TEST");
                builder.setSmallIcon(R.drawable.ic_launcher);
                builder.setOngoing(true);
//                builder.setPriority(Notification.PRIORITY_MIN);

                notificationManager.notify(777, builder.build());
            } else if (action.equals(Intent.ACTION_SCREEN_ON)) {
                notificationManager.cancel(777);
            }
        }
    }
}

先谢谢,

埃里克。

0 个答案:

没有答案