嗨其他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);
}
}
}
}
先谢谢,
埃里克。