blog.wlami.com

Virtuelles Zuhause von Wladislaw Mitzel

Halb-Transparente Activity in Android erstellen

Inspiriert durch eine Frage auf codekicker.de habe ich versucht eine Activity zu erstellen, die sich halb-transparent über den Hintergrund legt. Das hat sich als knifflig herausgestellt, da die Doku an dieser Stelle knapp ist und die IDE zusätzlich einen kleinen Umweg verlangt. Im Folgenden beschreibe ich von Anfang an, wie ihr eine neue Activity erstellt und diese halb-transparent macht.

Mit aLogcat eure Android Logs nach Zugangsdaten durchsuchen

Heute wollte ich eine App installieren, die eigentlich nur Fotos schießen und einige Effekte anwenden soll. In den Berechtigungen zeigte mir der Android Market allerdings, dass die App die Logs lesen will. Das Recht heißt “Vertrauliche Protokolldaten lesen” und kann sehr kritisch sein. Loggt eine App beispielsweise zu Debugging-Zwecken, so kann es passieren, dass darunter auch mal Zugangsdaten wie Benutzername oder Passwörter auftauchen. Mit aLogcat könnt ihr folgendermaßen eure Logs selbst überprüfen:

Java JUnit4: Auf Exception prüfen

Hier ein kleiner Tipp für zwischendurch: Ihr schreibt einen Test mit JUnit (>=Version 4) und erwartet in eurem Code eine Exception? Durch Annotations ist es möglich gezielt eine Exception zu verlangen, damit der Test erfolgreich ist:

1
2
3
4
5
@Test(expected=IllegalArgumentException.class)
public void testMethod() {
  Object illegalArg = null;
  myMethod(illegalArg); //böse! soll eine Exception werfen!
}

Durch die expected-Annotation in Zeile 1 kann also gezielt die Klasse der erwarteten Exception, in unserem Fall eine IllegalArgumentException, angegeben werden.

Dann wünsch ich Euch mal frohes Testen!

UDP-Pakete in Java 20 mal schneller verschicken

An vielen Stellen bekommt man zu hören UDP sei verbindungslos. Die üblichen Beispiele zum Verschicken von UDP-Paketen in Java sehen dementsprechend folgendermaßen aus:

1
2
3
4
5
6
DatagramSocket sock = new DatagramSocket();
for (int i = 0; i < 1000; i++) {
  byte[] content = new Long(System.currentTimeMillis()).toString().getBytes();
  DatagramPacket packet = new DatagramPacket(content, content.length, InetAddress.getLocalHost(), 1337);
  sock.send(packet);
}

Dieser Code funktioniert wunderbar und verschickt bei meinen Tests knapp 1000 UDP-Pakete/Sekunde, bzw. braucht 1000ms zum Ausführen. Doch wir haben hier noch Potential nach oben: