简体   繁体   中英

App is not running in Background (Android Studio java)

I am working on an Android app and I want to activate a daily Alarm (I used 5 min interval just as an example to test).

I used a Brodacast receiver (Static one declared in the manifest file), but the app still doesn't work. Here's my code:

The Manifest file:

</activity> <receiver android:name=".ExecutableService" android:enabled="true" ></receiver </application>

The AlarmHandler class:

public class AlarmHandler  {
    private Context context;

    public AlarmHandler(Context context) {
        this.context = context;
    }
    //This will active the alarm
    public void setAlarmManager(){
        Intent intent = new Intent(context,ExecutableService.class);
        PendingIntent sender  = PendingIntent.getBroadcast(context ,2,intent,0);
        AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        if (alarmManager != null) {
            long triggerAfter=60*5*1000;//this will trigger the service after 5 min
            long triggerEvery=60*5*1000;//this will repeat alarm every 5 min after that
            alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,triggerAfter,triggerEvery,sender);
        }
    }
    //This will cancel the alarm
    public void cancelAlarm (){
        Intent intent = new Intent(context,ExecutableService.class);
        PendingIntent sender = PendingIntent.getBroadcast(context,2,intent,0);
        AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        if (alarmManager != null) {
            alarmManager.cancel(sender);
        }
    }
} 

This is the Broadcast receiver:

 import ...
public class ExecutableService extends BroadcastReceiver {
private static final String TAG="Executable Service";
@Override
public void onReceive(Context context, Intent intent) {
    //this will be executed at selected interval  Notification show
    Toast.makeText(context, "Hello World 2! ", Toast.LENGTH_SHORT).show();
    Log.d(TAG, "onReceive: it worked ");
    Vibrator v=(Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        v.vibrate(VibrationEffect.createOneShot(500, VibrationEffect.DEFAULT_AMPLITUDE));
    } else {
        //deprecated in API 26
        v.vibrate(500);
    }}}

And this is the MainActivty where I activate the alarm:

public class MainActivity2 extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        AlarmHandler alarmHandler = new AlarmHandler(this);
        //cancel the previous scheduled alarm
        alarmHandler.cancelAlarm();
        //set the new alarm after one hour
        alarmHandler.setAlarmManager();
        Toast.makeText(this, "Alarm Set ! ", Toast.LENGTH_SHORT).show();
    }

If this is not the way that I should use to run the app in the background and push a notification (or a simple toast at a specific time), what is the best way to do it?

I tried also jobscheduler services.

you set the alarm start time to long triggerAfter=60*5*1000; I suggest changing this to long triggerAfter =60*5*1000+ System.currentTimeMillis()

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM