Android-服务和通知创建
从今天早上开始,我一直在努力解决这个问题(至少对我来说这是个问题) 我的情况如下: 我构建了一个Android后台服务,它正在监听MQTT主题。当此服务收到MQTT消息时,它将为用户创建通知。 我的服务能够侦听和接收MQTT消息。我不能做的是显示我自己的通知布局并单击通知以查看通知详细信息 我正在使用以下软件版本:Android-服务和通知创建,android,notifications,Android,Notifications,从今天早上开始,我一直在努力解决这个问题(至少对我来说这是个问题) 我的情况如下: 我构建了一个Android后台服务,它正在监听MQTT主题。当此服务收到MQTT消息时,它将为用户创建通知。 我的服务能够侦听和接收MQTT消息。我不能做的是显示我自己的通知布局并单击通知以查看通知详细信息 我正在使用以下软件版本: 安卓: 编译版本:21 明斯克1:16 targetSdkVersion:21 MQTT客户端:PAHO 1.0.2 在我的服务中,当我建立与mqttTopic的连接时,我使
- 安卓:
- 编译版本:21
- 明斯克1:16
- targetSdkVersion:21
- MQTT客户端:PAHO 1.0.2
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/activity_visualizza_notifica_id"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<TextView
android:id="@+id/data_notifica_text_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:text="Ciao dalla notifica"
android:layout_toLeftOf="@+id/data_ricezione_notifica_text_id"
android:layout_toStartOf="@+id/data_ricezione_notifica_text_id"
android:ems="10" />
<TextView
android:id="@+id/data_ricezione_notifica_text_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:ems="10" />
<TextView
android:id="@+id/tipo_notifica_text_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_below="@+id/descrizione_notifica_text_id"
android:ems="10" />
<TextView
android:id="@+id/descrizione_notifica_text_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentStart="true"
android:layout_below="@+id/data_notifica_text_id"
android:ems="10" />
</RelativeLayout>
dettaglio_notifica.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/id_dettaglio_notifica"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/dettaglio_data_notifica_text_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:text="Ciao dalla notifica"
android:layout_toLeftOf="@+id/dettaglio_data_ricezione_notifica_text_id"
android:layout_toStartOf="@+id/dettaglio_data_ricezione_notifica_text_id"
android:ems="10" />
<TextView
android:id="@+id/dettaglio_data_ricezione_notifica_text_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:ems="10" />
<TextView
android:id="@+id/dettaglio_tipo_notifica_text_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_below="@+id/dettaglio_descrizione_notifica_text_id"
android:ems="10" />
<TextView
android:id="@+id/dettaglio_descrizione_notifica_text_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentStart="true"
android:layout_below="@+id/dettaglio_data_notifica_text_id"
android:ems="10" />
</RelativeLayout>
在回调实现中,我以以下方式发送广播:
private void propagateBroadcastAction( AllarmeMerciPericolose amp )
{
Intent broadcastIntent = new Intent();
broadcastIntent.setAction(IConstants.MQTT_MSG_RECEIVED_MSG);
broadcastIntent.putExtra(IConstants.NOTIFICA_DATA, amp);
currentService.sendBroadcast(broadcastIntent);
}
但我的自定义通知未显示;我将显示为通知的内容附加到用户(在我的模拟器中)
如您所见,通知已创建,但布局为空。。。。
知道我遗漏了什么吗
多谢各位
安吉洛你试过这个例子吗:@AnggrayudiH谢谢你的回答。我试过了,得到了同样的结果……试一下
NotificationCompat.Builder
,看看会发生什么。@AnggrayudiH遗憾的是,我使用NotificationCompact.Builder
也得到了同样的结果。。。这真的令人沮丧
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/id_dettaglio_notifica"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/dettaglio_data_notifica_text_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:text="Ciao dalla notifica"
android:layout_toLeftOf="@+id/dettaglio_data_ricezione_notifica_text_id"
android:layout_toStartOf="@+id/dettaglio_data_ricezione_notifica_text_id"
android:ems="10" />
<TextView
android:id="@+id/dettaglio_data_ricezione_notifica_text_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:ems="10" />
<TextView
android:id="@+id/dettaglio_tipo_notifica_text_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_below="@+id/dettaglio_descrizione_notifica_text_id"
android:ems="10" />
<TextView
android:id="@+id/dettaglio_descrizione_notifica_text_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentStart="true"
android:layout_below="@+id/dettaglio_data_notifica_text_id"
android:ems="10" />
</RelativeLayout>
public class AllarmiMerciPericoloseReceiver extends BroadcastReceiver {
private static final String TAG_LOG = AllarmiMerciPericoloseReceiver.class.getSimpleName();
public AllarmiMerciPericoloseReceiver() {
}
@Override
public void onReceive(Context context, Intent intent) {
try
{
if( intent.getAction().equals(IConstants.MQTT_MSG_RECEIVED_MSG) )
{
AllarmeMerciPericolose amp = (AllarmeMerciPericolose)intent.getExtras().get(IConstants.NOTIFICA_DATA);
notifyUser(amp, context);
}
}
catch (Exception e)
{
Log.e(TAG_LOG, "Errore nel receiver per le notifiche "+e.getMessage(), e);
}
}
private void notifyUser(AllarmeMerciPericolose amp, Context context) {
//Preparo la view per le notifiche; si deve utilizzare una RemoteView
RemoteViews remoteView = new RemoteViews(context.getPackageName(), R.layout.activity_visualizza_notifica);
//Indico l'activity da richiamare quando clicco sulla notifica
Intent notificationIntent = new Intent(context, VisualizzaNotificaActivity.class);
//notificationIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//Passo i parametri che l'activity dovrà gestire al suo interno
notificationIntent.putExtra(IConstants.NOTIFICA_DATA, amp);
//Apro l'activity indicata in precedenza
PendingIntent contentIntent = PendingIntent.getActivity(context, (int) System.currentTimeMillis(), notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_CANCEL_CURRENT);
//Preparo il costruttore della notifica
Notification.Builder builder = new Notification.Builder(context);
//Inserisco l'icona della notifica
builder.setSmallIcon(R.mipmap.warning);
//Indico quando è creata la notifica
builder.setWhen(System.currentTimeMillis());
//Indico se continua; nel nostro caso non lo è perché non riguarda un processo di background e l'utente può decidere di
//dismettere la notifica stessa
builder.setOngoing(false);
//Dismettiamo la notifica
builder.setAutoCancel(false);
builder.setTicker(context.getString(R.string.notifica_ticker));
builder.setContentIntent(contentIntent);
builder.setContent(remoteView);
builder.setDefaults(Notification.DEFAULT_VIBRATE | Notification.DEFAULT_SOUND);
//builder.setDefaults(Notification.DEFAULT_SOUND);
//Valorizzo i campi della notifica
remoteView.setTextViewText(R.id.data_notifica_text_id, DateUtil.formatMillisDate(amp.getDataAllarme()));
remoteView.setTextViewText(R.id.data_ricezione_notifica_text_id, DateUtil.formatMillisDate(amp.getDataRicezioneAllarme()));
TipoAllarmeMercePericolosa tmp = amp.getTipoAllarme();
if (tmp != null) {
String tipoNotifica = tmp.getCodiceAllarme() + " - " + tmp.getDescrizioneAllarme();
remoteView.setTextViewText(R.id.tipo_notifica_text_id, tipoNotifica);
}
remoteView.setTextViewText(R.id.descrizione_notifica_text_id, amp.getDescrizioneAllarme());
Notification notification = builder.build();
NotificationManager nm = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
nm.notify(IConstants.MQTT_NEW_NOTIFICATION_ARRIVED, notification);
}
}
private void propagateBroadcastAction( AllarmeMerciPericolose amp )
{
Intent broadcastIntent = new Intent();
broadcastIntent.setAction(IConstants.MQTT_MSG_RECEIVED_MSG);
broadcastIntent.putExtra(IConstants.NOTIFICA_DATA, amp);
currentService.sendBroadcast(broadcastIntent);
}