IntentService Alarm Manager

wer112

Top Contributor
Ich habe in meiner App was eingebaut. Ich habe ein Youtube Viedeo gesehen(Video Für Alarm Manager, Hintergrundprozess alle 10 min.........), wo alle 10 Minuten ein Toast(Nachricht) ausgeführt wurden ist. Ich habe es genauso nach gemacht. Leider geht der Alarm nicht richtig. Es wir bei mir garnicht angezeigt, oder zur falschen Zeit. Selten wird es in der App direkt angezeigt. Ich weiß nicht, woran es liegen kann, oder ob ich was am Code falsch gemacht habe(habe alles genauso abgeschrieben). Dieser Alarm Manager sollte am besten jede Sekunde losgehen und eine Aufgabe erfüllen(Habe wie im Video erstmal genauso die 10 min gemacht). Dann habe ich so wie im Video eine Klasse gemacht, die wenn das Smartphone hoch fährt, der Hintergrundprozess weiter geht. Ich hoffe, das mir geholfen wird und alle anderen auch, die dieses Video gesehen haben und es bei denen auch garnicht funktioniert hatte. Wenn die App komplett geschlossen ist, sollte es trotzdem funktionieren, so wie im Video. Ich bedanke mich für jede hilfreiche Antwort....



Javascript:
package com.andrealfredklug.countdownwlanapp2;

import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.ActivityInfo;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.os.Vibrator;
import android.util.Log;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;

import java.sql.Time;
import java.text.DateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.Calendar;
import java.util.List;
import java.util.Locale;


public class internet extends AppCompatActivity {

    TextView errortext;


    private TextView countdownText;
    private Button countdownButton;

    private CountDownTimer countDownTimer;
    private static final long START_TIME_IN_MILLIS = 0; // 1000 = 1s
    private long timeLeftInMilliseconds;
    private long mEndTime;


    String gestern;
    Calendar morgen;

    Vibrator vibrator;


    private boolean timerRunning;

    private boolean internetcheck;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_internet);
        this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

        AlarmManager alarmManager = (AlarmManager) internet.this.getSystemService(internet.this.ALARM_SERVICE);

        Intent startServiceIntent = new Intent(internet.this , Hintergrundservice.class);
        PendingIntent startServicePendingIntent = PendingIntent.getService(internet.this, 0, startServiceIntent, 0);

        Calendar alarmcalender = Calendar.getInstance();
        alarmcalender.setTimeInMillis(System.currentTimeMillis() + 1000);

        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, alarmcalender.getTimeInMillis(), 1000 , startServicePendingIntent);



        errortext = findViewById(R.id.errortextview);
        countdownText = findViewById(R.id.countdowntext);
        countdownButton = findViewById(R.id.button3);





        countdownButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {

                startStop();

            }

        });
        updateTimer();
    }



    @Override
    public void onBackPressed() {
        Log.e("######","Du kommst hier net raus");
    }

    private void updateTimer() {

        int minutes = (int) (timeLeftInMilliseconds / 1000) / 60;
        int seconds = (int) (timeLeftInMilliseconds / 1000) % 60;
        String timeLeftFormatted = String.format(Locale.getDefault(), "%02d:%02d", minutes, seconds);
        countdownText.setText(timeLeftFormatted);


    }



    public void startStop(){


        if (timerRunning){

            stopTimer();

        }else{

            startTimer();
        }

    }

    private void stopTimer() {

        countDownTimer.cancel();
        countdownButton.setText("Start");
        timerRunning = false;


        WifiManager wmgr = (WifiManager)getApplicationContext().getSystemService(Context.WIFI_SERVICE);
        int networkId = wmgr.getConnectionInfo().getNetworkId();
        wmgr.removeNetwork(networkId);
        wmgr.saveConfiguration();
        wmgr.setWifiEnabled(false);
    }



    public void startTimer() {
        mEndTime = System.currentTimeMillis() + timeLeftInMilliseconds;

        countDownTimer = new CountDownTimer(timeLeftInMilliseconds, 1000) {
            @Override
            public void onTick(long l) {

                WifiManager wmgr = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);

                wmgr.setWifiEnabled(true);

                BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
                    @Override
                    public void onReceive(Context c, Intent intent) {
                        WifiManager wmgr = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
                        wmgr.getScanResults();
                    }
                };

                final WifiConfiguration config = new WifiConfiguration();
                config.SSID = "\"test\"";
                config.preSharedKey = "\"pass1234\"";
                wmgr.setWifiEnabled(true);
                int networkId = wmgr.addNetwork(config);
                wmgr.enableNetwork(networkId, true);


                timeLeftInMilliseconds = l;
                updateTimer();




            }

            @Override
            public void onFinish() {
                countdownButton.setText("Start");







            }
        }.start();

        countdownButton.setText("Pause");
        timerRunning = true;


    }


    @Override
    protected void onStop() {
        super.onStop();
        SharedPreferences prefs = getSharedPreferences("prefs", MODE_PRIVATE);
        SharedPreferences.Editor editor = prefs.edit();
        editor.putLong("millisLeft",timeLeftInMilliseconds);
        editor.putBoolean("timerRunning", timerRunning);
        editor.putLong("endTime", mEndTime);
        editor.apply();
        if (countDownTimer != null) {
            countDownTimer.cancel();
        }

    }
    @Override
    protected void onStart() {
        super.onStart();
        Calendar calendar = Calendar.getInstance();
        LocalDateTime midnight = LocalDateTime.of(LocalDate.now(), LocalTime.MIDNIGHT);

        DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT);
        df = DateFormat.getTimeInstance(DateFormat.MEDIUM);

        if (df.equals(midnight)) {
            System.out.println("Date1 is equal Date2");

            timeLeftInMilliseconds = 7200000; String Day = DateFormat.getDateInstance().format(calendar.getTime());


            SharedPreferences prefs = getSharedPreferences("prefs", MODE_PRIVATE);
            SharedPreferences.Editor editor = prefs.edit();
            editor.putLong("millisLeft",timeLeftInMilliseconds);
            editor.apply();
            timerRunning = false;
            WifiManager wmgr = (WifiManager)getApplicationContext().getSystemService(Context.WIFI_SERVICE);
            int networkId = wmgr.getConnectionInfo().getNetworkId();
            wmgr.removeNetwork(networkId);
            wmgr.saveConfiguration();
            wmgr.setWifiEnabled(false);
            countdownButton.setText("Start");
        }

        SharedPreferences prefs = getSharedPreferences("prefs", MODE_PRIVATE);
        timeLeftInMilliseconds = prefs.getLong("millisLeft", START_TIME_IN_MILLIS);
        timerRunning = prefs.getBoolean("timerRunning", false);
        updateTimer();

        if (timerRunning) {
            mEndTime = prefs.getLong("endTime", 0);
            timeLeftInMilliseconds = mEndTime - System.currentTimeMillis();
            if (timeLeftInMilliseconds < 0) {
                timeLeftInMilliseconds = 0;
                timerRunning = false;
                WifiManager wmgr = (WifiManager)getApplicationContext().getSystemService(Context.WIFI_SERVICE);
                int networkId = wmgr.getConnectionInfo().getNetworkId();
                wmgr.removeNetwork(networkId);
                wmgr.saveConfiguration();
                wmgr.setWifiEnabled(false);
                errortext.setText("Das Internet ist für heute aufgebraucht");
                countdownButton.setText("Start");
                updateTimer();

            } else {
                startTimer();
            }
        }
    }

















}


Dann mein HintergrundService, wie im Video:

Javascript:
package com.andrealfredklug.countdownwlanapp2;

import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.wifi.WifiManager;
import android.os.IBinder;
import android.widget.Toast;

import androidx.annotation.Nullable;

public class Hintergrundservice extends Service {




    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        

        Toast.makeText(getApplicationContext(), "Countdown wurde aktualisiert", Toast.LENGTH_LONG).show();

        stopSelf();
        return super.onStartCommand(intent, flags, startId);
    }

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

Und mein Boot Klasse.
 

Neue Themen


Oben