Android Aktivität ohne GUI
-
22-08-2019 - |
Frage
Ich habe eine Aktivität erstellt, die nur über einen Link ins Leben gerufen werden sollte Ich mag diese Tätigkeit keine GUI haben (einen Intent-Filter verwenden.) - Ich mag es nur einen Dienst starten und eine Benachrichtigung in dem PUT Bar. Ich habe versucht, die Intent-Filter für den Link in meinem Dienst zu stellen, aber das funktioniert nicht. Gibt es eine bessere Sache, dies zu tun, die auf Vorsatz Filter beantworten - oder kann ich nur meine Tätigkeit machen keine GUI haben
Sorry, wenn ich meine es verwirrend, Isaac
Lösung
Ihre beste Wette scheint eine BroadcastReceiver
zu werden. Sie können einen neuen BroadcastReceiver erstellen, die für das Intent hört Ihre Benachrichtigung auslösen und Ihren Dienst wie folgt beginnen:
public class MyIntentReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context _context, Intent _intent) {
if (_intent.getAction().equals(MY_INTENT)) {
// TODO Broadcast a notification
_context.startService(new Intent(_context, MyService.class));
}
}
}
Und Sie können diese IntentReceiver registrieren direkt in der Anwendung Manifest ohne es innerhalb einer Aktivität zu schließen, um:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.domain.myapplication">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<service android:enabled="true" android:name="MyService"></service>
<receiver android:enabled="true" android:name="MyIntentReceiver">
<intent-filter>
<action android:name="MY_INTENT" />
</intent-filter>
</receiver>
</application>
</manifest>
Andere Tipps
vorherige Antwort Echoing, sollten Sie nicht einen Rundfunkempfänger verwenden.
In der gleichen Situation, was ich tat, war das Thema zu erklären, so:
<activity android:name="MyActivity"
android:label="@string/app_name"
android:theme="@android:style/Theme.NoDisplay">
Ich bin mir nicht sicher, ob ein Dienst funktionieren wird, aber ein Rundfunkempfänger würde auf jeden Fall nicht. URLs verwenden startActivity () ins Leben gerufen. Broadcast-Empfänger kann nicht darauf reagieren.
http://developer.android.com/reference/android/content /BroadcastReceiver.html
FTA: Beachten Sie, dass, obwohl die Intent-Klasse für das Senden und Empfangen dieser Sendungen verwendet wird, hier die Absicht Broadcast-Mechanismus ist völlig unabhängig von Intents, die verwendet werden Aktivitäten beginnen mit Context.startActivity (). Es gibt keine Möglichkeit für eine BroadcastReceiver zu sehen oder Capture-Intents verwendet mit startActivity (); Ebenso, wenn Sie eine Intent übertragen, werden Sie nie eine Aktivität oder starten.
Verwenden Dienst. Ich funktioniert auf jeden Fall. Wenn Sie das Programm klicken, würde er seine Arbeit ohne GUI tun. Verwenden Sie pendintgintent ... getService (MySerice.class ....). Erstellen Sie dann eine neue Klasse MyService die Service-Klasse erweitern. Innerhalb MyService.class, außer Kraft setzen onStart () und tun, was Sie tun wollen.