Service wird nur 1 mal ausgeführt

  • 4 Antworten
  • Letztes Antwortdatum
M

mitch_HD2

Fortgeschrittenes Mitglied
1
Noch eine andere Frage zum Service....

meine Manifest
Code:
</activity>
        <service android:name=".MyAlarmService"
            android:enabled="true" />

        <receiver android:name=".MyReceiver">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
                <category android:name="android.intent.category.HOME"/>
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </receiver>

und permissions
Code:
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.NETWORK" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
    <uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission>
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

mein Receiver
Code:
public class MyReceiver extends BroadcastReceiver {
    public void onReceive(Context context, Intent intent) {
        Intent service1 = new Intent(context, MyAlarmService.class);
        context.startService(service1);
    }
}

Mein problem ist nun....
wenn ich meine App starte... läuft der Service... ich bekomme meine gewünschten Notifications.. jede x sekunden...

wenn ich die App beende... kommt nichts mehr....

wenn ich neustarte... kommt eine Notification... und das wars....

LogCat spcukt mir nichts aus...scheint alles sauber
 
Wir bräuchten deinen Code für den Service bitte...
 
oh sorry... hier:)
Code:
public class MyAlarmService extends Service {

    public Context context = this;

    public static SqlLiteHelper db;

    private NotificationManager mManager;

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @SuppressWarnings("static-access")
    @Override
    public void onStart(Intent intent, int startId)
    {
        super.onStart(intent, startId);

        context = getApplicationContext();
        db = new SqlLiteHelper(context);

        ArrayList<Integer> moduleIDList = new ArrayList<Integer>();
        ArrayList<String> moduleDescriptionList = new ArrayList<String>();
        int moduleLength = 0;

       new DB_read_alarm_1().execute();

        moduleIDList = db.getModulesID();

        moduleDescriptionList = db.getModulesDescription();

        moduleLength = db.getModulesType().size();
        int notifyCounter = 0;
        for(int i=0;i<moduleLength;i++){
            int alarm = db.get_alarm_status(moduleIDList.get(i));
            System.out.println("Alarm "+alarm);

            if(alarm > 0) {
                mManager = (NotificationManager) this.getApplicationContext().getSystemService(this.getApplicationContext().NOTIFICATION_SERVICE);
                Intent intent1 = new Intent(this.getApplicationContext(), MainActivity.class);

                NotificationCompat.Builder notification = new NotificationCompat.Builder(context)
                        .setSmallIcon(R.mipmap.ic_launcher)
                        .setContentTitle("ALARM AUSGELÖST!")
                        .setContentText("Alarm von" + moduleDescriptionList.get(i))
                        .setAutoCancel(true);

                intent1.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);

                PendingIntent pendingNotificationIntent = PendingIntent.getActivity(this.getApplicationContext(), 0, intent1, PendingIntent.FLAG_UPDATE_CURRENT);
                //notification.flags |= Notification.FLAG_AUTO_CANCEL;
                //notification.setLatestEventInfo(this.getApplicationContext(), "Alarm", moduleDescriptionList.get(i), pendingNotificationIntent);
                Uri alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
                notification.setSound(alarmSound);

                mManager.notify(notifyCounter, notification.build());



                notifyCounter++;
            }

        }
    }
}


was ich bemerkt habe.... mit dem Emulator läuft es... nach dem Reboot.... und auch nach beenden der App....

aber nicht auf meinem Smartphone... (hueawei Honor 7)
 
Die Methode onStart() ist laut SDK deprecated und sollte nicht mehr verwendet werden.
Benutze stattdessen onStartCommand und mach dort am Ende ein return START_STICKY, dann sollte er nicht mehr so schnell beendet werden. (kann aber dennoch passieren wenn das System es für sinnvoll erachtet, es kann auch passieren, dass er neugestartet wird)
Willst du dass er fast gar nicht mehr beendet wird vom System musst du mit setForeground deinen Service als Foreground Service definieren.

Service | Android Developers
 
Fehler gefunden!:) trotzdem danke:)
Bei den Hueawei Dingern muss man unter Geschütze Apps erstmal sagen dass der die überhaupt ausführen darf.

werde es aber trotzdem mal mit deinem Tipp Probieren
 

Ähnliche Themen

AnnaBauer21
Antworten
14
Aufrufe
1.187
AnnaBauer21
AnnaBauer21
Zurück
Oben Unten