Android Service ferngesteuert starten

Sokdante

Mitglied
Guten Tag, wie oben schon beschrieben, suche ich eine Möglichkeit, einen Service eines anderen Handys von meinem aus zu starten.
Eine Suche hat mir leider nichts geholfen, weiß nicht genau, wonach ich suchen soll.

Es geht um eine App, die zufällige Rechenaufgaben stellt, die zeitlich auch rein zufällig sind.
Die App läuft wunderbar im Hintergrund und zeigt die Rechenaufgabe an, die in einer bestimmten Zeit gelöst werden muss. Dennoch verbraucht der Service im Hintergrund mehr Akku als gedacht.
Ich wollte dazu eine App schreiben, die den Service der Rechenapp starten und auch wieder stoppen kann. Mir ist klar, dass ich dazu noch eine dritte App für einen Server schreiben muss, der die Anforderung zum Starten gibt. Allerdings weiß ich im Moment nicht wie.

Welche Methode ist besser geeignet, Sockets oder Push Notification?

Freue mich über alle, die mir versuchen zu helfen.
Danke, danke im voraus .
 
Wenn Du nur zu bestimmten Zeiten etwas machen willst, dann wäre evtl. die JobScheduler API das, was Du suchst.
https://developer.android.com/reference/android/app/job/JobScheduler

Aber ich habe damit noch nichts gemacht... Damit hättest Du aber eine App, die sich da halt selbst tasks setzt und nach meinem Verständnis nicht ständig durchlaufen muss.

Falls Du das aber auch zentral gesteuert haben willst, dann wäre evtl. auch denkbar, dass Du Firebase Cloud Messaging nutzt. Dann wird das halt von außen getriggert wann da welcher Client was bekommt... (Also wohl das, was Du als Push Notification bezeichnet hast).

Socket ist problematisch, denn da muss
a) Das gerät erreichbar sein. Das muss nicht gegeben sein. Viele Provider nutzen freie Subnetze (also z.B. 10.*) für die TCP/IP Verbindungen und da ist das Gerät von außen nicht erreichbar.
b) Die App muss durchlaufen und auf dem Socket hören. Damit hast Du wieder das Problem mit dem Stromverbrauch (nach meinem Verständnis).

Aber evtl. antwortet noch jemand (wie z.B. @mihe7) mit mehr Erfahrung in der Android Entwicklung ...
 
Ich habe sowas in der Richtung privat mal mit einem alten Android-Gerät zur Temperaturüberwachung gemacht: auf SMS lauschen, Foto von Thermometer machen und per Mail (UMTS) verschicken. Hierzu wird einfach ein BroadcastReceiver registriert. Das Handy wurde täglich 2x per Zeitschaltuhr geladen, der Akku hat das ungefähr 3 Jahre mitgemacht (wobei im Sommer abgesteckt war), bis er vor kurzem seinen Geist aufgab :-(

Ansonsten halten sich meine Erfahrungen bzgl. Akkulaufzeiten sehr in Grenzen (Apps, die bei uns in der Arbeit entwickelt werden, sind für Leute, die in der Regel einen Zigarettenanzünder in der Nähe haben 😉)

Letztlich geht es ja um eine Form von Instant Messaging und dafür gibt es bereits Lösungen. Grundsätzlich frage ich mich allerdings, warum der Aufgabensteller auf einem Android-Gerät laufen soll, wenn dieser auch noch zufällig Aufgaben stellt...

MQTT ist ein, ich meine von IBM entwickeltes Protokoll, das auf Low-Power-Devices ausgelegt wurde. Ein Keep-Alive von 240s zieht lt. http://stephendnicholas.com/posts/power-profiling-mqtt-on-android etwa 0,15 % des Battery-Levels je Stunde, wenn das Teil per 3G verbunden ist. Hier bräuchtest Du einen MQTT-Broker.

Wenn der Aufgabensteller nicht für Anfragen erreichbar sein muss, würde ich es, wie @JustNobody schon geschrieben hat, einfach mit einem JobScheduler umsetzen. Auch hier bräuchtest Du einen Broker. Wenn Du keinen MQTT-Broker einrichten kannst, keinen öffentlichen verwenden willst und auch keinen bezahlen willst, könntest Du an der Stelle auch selbst eine Billig-Lösung zusammenschustern (z. B. Server-Requests via normales HTTP, Clients via WebSocket).

Discord/WhatsApp -> keine Ahnung, was die APIs so bieten. E-Mail (SMTP/IMAP) würde mir noch einfallen; kommt halt darauf an, wie viele Clients bedient werden sollen.
 
Ich habe es noch nicht geschafft, setze mich heute Abend dran.
Was mir gelungen ist, ist den Akkuverbrauch zu reduzieren mittles einem Timer.

Leider habe ich da ein neues Problem.
In einem Service schreibe ich eine Datei über den MediaRecorder, die in einem Ordner gespeichert wird und wenn die Datei existiert, immer um 2 erhöhen.
Ich möchte statt auf den Speicher zu schreiben, die Datei direkt in den Firebase Storage uploaden.

Hier wird die Datei in das Verzeichnis geschrieben.

Code:
File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)
File file = new File(path, child:"File");

for (int num = 0;file.exists(); num++) {
file = new File(path, child:"File" + (num++));
}

mediaRecorder.setOutputFile(file);


Ich habe vieles versucht und umgeschrieben, bin aber nicht darauf gekommen den Code so zu formulieren, um statt auf den Speicher zu schreiben, die Datei auf den Firebase Storage Server upzuloaden.
Kennt sich jemand diesbezüglich aus?
 

Zurück
Oben