Ich schreibe meinen Code in Android Studio, aber das Projekt, das ich schreibe, hat keine GUI und aktualisiert nie Ansichten für einen Benutzer. Es überwacht einfach die zuletzt installierte App mit einem Broadcast-Empfänger und sendet Informationen an eine andere Java-Datei.Senden von Daten aus BroadcastReceiver zu Aktivität, während App im Hintergrund ist
Ich frage mich, wie ich eine Zeichenfolge von einem Broadcast-Empfänger zu einer Aktivität senden kann (vielleicht sollte dies nicht eine "Aktivität" sondern ein "Dienst" sein?), Und diese Arbeit, während die App im Hintergrund ist.
Gerade habe ich einen Broadcast-Empfänger für die zuletzt installierte App auf meinem Handy (das läuft im Hintergrund). Und ich habe einen benutzerdefinierten Broadcast-Empfänger eingerichtet, um meine Hauptaktivität zu benachrichtigen, wenn der Broadcast-Empfänger eine installierte App erhält. Dieser benutzerdefinierte Empfänger funktioniert jedoch nicht im Hintergrund. Vielleicht sollte ich eine Aktivität nicht verwenden, um Informationen vom BroadcastReceiver zu erhalten?
Gibt es eine Möglichkeit, Informationen von meinem Broadcast-Empfänger zu meiner Hauptaktivität zu senden, während die App im Hintergrund ist? Ich brauche auch meine Hauptaktivität, um normale Funktion fortzusetzen, während ich im Hintergrund bin (es gibt keine GUI-Aktualisierungen, während es im Hintergrund ist).
Mein BroadcastReceiver die Daten meiner Haupttätigkeit durch eine neue Intent
public class NewInstallReceiver extends BroadcastReceiver {
ApplicationInfo ai;
@Override
public void onReceive(Context context, Intent intent) {
final PackageManager pm = context.getPackageManager();
try {
// if app is added, get package info
ai = pm.getApplicationInfo(intent.getData().getSchemeSpecificPart(), 0);
Intent i = new Intent("broadcastName");
// Data pass to activity
i.putExtra("appInfo", ai);
context.sendBroadcast(i);
} catch (final PackageManager.NameNotFoundException e) {
ai = null;
}
}
}
In meinem MainActivity in onCreate sendet registrieren ich den Hörer:
registerReceiver(broadcastReceiver, new IntentFilter("broadcastName"));
Ich empfange Daten von BroadcastReceiver
BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// get applicationInfo
Bundle b = intent.getExtras();
Object applicationInfo = b.get("appInfo");
ApplicationInfo appInfo = (ApplicationInfo) applicationInfo;
getNewData(appInfo);
}
};
Dann muss ich den Hörer in MainActivity deregistrieren, aber offensichtlich ist dies nicht zulassen, dass mir Informationen von BroadcastReceiver zu erhalten, sobald die App im Hintergrund
geht@Override
public void onStop()
{
try{
unregisterReceiver(broadcastReceiver);
}
catch(Exception e){
System.out.println("Exception is " + e.toString());
}
super.onStop();
}
Vielen Dank für diese Antwort. Ich stimme völlig mit Ihnen. Aber um meine Frage hinzuzufügen, denke ich, dass meine "App" niemals eine GUI benötigt, die der Benutzer sehen kann. In diesem Sinne ist es nicht wirklich eine App, sondern nur ein laufendes Programm, das ich gerade in Android Studio schreibe. Wenn dies der Fall ist, sollte dann meine "MainActivity" in einen Dienst umgewandelt werden? Ist dies die beste Lösung, oder gibt es eine andere Möglichkeit, wenn meine App immer ausgeführt werden muss, um nach installierten Apps zu suchen, und in keiner Ansicht aktualisiert wird? – Natalie
Hmmmm .. Da Sie keine GUI haben, brauchen Sie keine Aktivität ... Vielleicht brauchen Sie nur den Rundfunkempfänger. Der Empfänger erhält die Aktion und erledigt alle Aufgaben, die Sie benötigen .... Wenn Sie alle Aufgaben im Empfänger ausführen können, brauchen Sie den Dienst weder ... – W0rmH0le
Ich werde damit herumspielen. Vielen Dank – Natalie