F
Flocke123
Ambitioniertes Mitglied
- 4
Hallo zusammen,
...viele Sinnlos Infos wieder gelöscht...
Meine Notifikationen funktionieren allgemein gut. Ein Broadcast Receiver startet bei Device-Booted, der wiederum einen Service startet, der auf einkommende UDP Pakete auf einem bestimmten Port lauscht und mir dadurch eine Notifikation bildet.
Ein paar von euch erinnern sich vllt noch an eine Diskussion bzgl. "Akku wird zur Heizplatte" usw.
Erkenntnis: Ja, es frisst regelrecht den Akku auf... sehr schön zu beobachten, wie der Ladebalken nach unten geht. Wirklich Heiß wird das Gerät aber nicht. Nichts desto Trotz ist es keine schöne Sache, ich werde das anders gestalten.
Aber darum gehts ja im Moment nicht.
Jetzt zur eigentlichen Frage:
Ich sende ein Paket, es kommt an, Notifikation wird erstellt -> Wunderbar
Ich sende ein Zweites Paket, es kommt an, überschreibt die erste -> Schlecht
...
Warum erstellt er mir hier keine zweite Notifikation, die "unter der ersten" zu sehen ist?
Hintergrund ist, da später jede Notifikation eine spezielle Aufgabe hat.
Eine muss man mit einer Dezimalzahl quittieren, eine andere nur mit "ja" oder "nein".
Ich pack jetzt mal den ganzen Code mit rein, vielleicht ist es ja für andere Interessant zu wissen.
MyReceiver.class
MyService.class
in der Wiederum ein AsyncTask ist, der mir die ankommenden Pakete in Notifikationen umwandelt.
ResultActivty.class
die gestartet wird, wenn man auf die Notifikation klickt.
Seltsamerweise, steht hier immer nur der Text der ersten Notifikation, egal wieviele ich später noch erzeuge.
Zusammengefasst:
Was muss ich tun, damit ich meherer Notifikationen angezeigt bekomme und nicht nur immer die letzte.
Und wie muss ich das umsetzen, wenn ich unterschiedliche "Notifikationsmodelle" habe.
Hoffe es ist verständlich genug.
Gruß Flocke
...viele Sinnlos Infos wieder gelöscht...
Meine Notifikationen funktionieren allgemein gut. Ein Broadcast Receiver startet bei Device-Booted, der wiederum einen Service startet, der auf einkommende UDP Pakete auf einem bestimmten Port lauscht und mir dadurch eine Notifikation bildet.
Ein paar von euch erinnern sich vllt noch an eine Diskussion bzgl. "Akku wird zur Heizplatte" usw.
Erkenntnis: Ja, es frisst regelrecht den Akku auf... sehr schön zu beobachten, wie der Ladebalken nach unten geht. Wirklich Heiß wird das Gerät aber nicht. Nichts desto Trotz ist es keine schöne Sache, ich werde das anders gestalten.
Aber darum gehts ja im Moment nicht.
Jetzt zur eigentlichen Frage:
Ich sende ein Paket, es kommt an, Notifikation wird erstellt -> Wunderbar
Ich sende ein Zweites Paket, es kommt an, überschreibt die erste -> Schlecht
...
Warum erstellt er mir hier keine zweite Notifikation, die "unter der ersten" zu sehen ist?
Hintergrund ist, da später jede Notifikation eine spezielle Aufgabe hat.
Eine muss man mit einer Dezimalzahl quittieren, eine andere nur mit "ja" oder "nein".
Ich pack jetzt mal den ganzen Code mit rein, vielleicht ist es ja für andere Interessant zu wissen.
MyReceiver.class
Code:
public class MyReceiver extends BroadcastReceiver {
public MyReceiver() {
}
@Override
public void onReceive(Context context, Intent intent) {
Intent serviceIntent = new Intent(context, MyService.class);
context.startService(serviceIntent);
Log.i("MyReceiver", "started");
throw new UnsupportedOperationException("Not yet implemented");
}
}
MyService.class
in der Wiederum ein AsyncTask ist, der mir die ankommenden Pakete in Notifikationen umwandelt.
Code:
public class MyService extends Service {
DatagramSocket socket;
public MyService() {
}
@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
throw new UnsupportedOperationException("Not yet implemented");
}
@Override
public void onDestroy() {
Toast.makeText(this, "Hüpfburg Service Stopped", Toast.LENGTH_LONG).show();
Log.d("MyService", "onDestroy");
super.onDestroy();
}
@Override
public void onStart(Intent intent, int startId) {
Toast.makeText(this, "Hüpfburg Service Started", Toast.LENGTH_LONG).show();
MyUdpListener listener = new MyUdpListener();
listener.execute();
super.onStart(intent, startId);
}
public class MyUdpListener extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
Toast.makeText(getApplicationContext(), "Hüpfburg Udp Listener Started", Toast.LENGTH_LONG).show();
super.onPreExecute();
}
@Override
protected String doInBackground(String... arg0) {
try {
if (socket == null) {
socket = new DatagramSocket(null);
SocketAddress socketAddr = new InetSocketAddress(2050);
socket.setReuseAddress(true);
socket.setBroadcast(true);
socket.bind(socketAddr);
}
} catch (SocketException e) {
e.printStackTrace();
}
byte[] buf = new byte[1024];
DatagramPacket packet = new DatagramPacket(buf, buf.length);
while(true) {
try {
Log.i("MyUdpListener", "listening...");
socket.receive(packet);
String message = new String(packet.getData(), 0, packet.getLength());
publishProgress(message);
} catch (IOException e) {
e.printStackTrace();
}
}
}
@Override
protected void onProgressUpdate(String... values) {
Intent intent = new Intent(getApplicationContext(), ResultActivity.class);
intent.putExtra("Text", values[0]);
PendingIntent pIntent = PendingIntent.getActivity(getApplicationContext(), 0, intent, 0);
//Build Notification
Notification n = new Notification.Builder(getApplicationContext())
.setSmallIcon(R.drawable.ic_launcher)
.setContentTitle("Hüpfburg")
.setContentText(values[0])
.setContentIntent(pIntent)
.build();
NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.notify(0, n);
super.onProgressUpdate(values);
}
@Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
}
}
}
ResultActivty.class
die gestartet wird, wenn man auf die Notifikation klickt.
Seltsamerweise, steht hier immer nur der Text der ersten Notifikation, egal wieviele ich später noch erzeuge.
Code:
public class ResultActivity extends Activity {
DatagramSocket socket;
TextView tvResult;
boolean connected;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvResult = (TextView)findViewById(R.id.textViewResult);
Bundle extras = getIntent().getExtras();
String text = null;
if (extras != null) {
text = extras.getString("Text");
getIntent().removeExtra("Text");
}
if (text != null) {
tvResult.setText(text);
}
}
Zusammengefasst:
Was muss ich tun, damit ich meherer Notifikationen angezeigt bekomme und nicht nur immer die letzte.
Und wie muss ich das umsetzen, wenn ich unterschiedliche "Notifikationsmodelle" habe.
Hoffe es ist verständlich genug.
Gruß Flocke