Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

android schedule task to execute at specific time daily

Tags:

I am wanting to change my ringtone volume at specific time each day. I used a calendar to specify the time, and I am attempting to use alarmManager to execute it. Here is what I have. (I am a noobie go easy on me)

package com.example.ringervolume.app;  import android.app.Activity; import android.app.AlarmManager; import android.app.PendingIntent; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.media.AudioManager; import android.os.Bundle; import android.support.v7.app.ActionBarActivity; import android.view.Menu; import android.view.MenuItem; import android.widget.TextView;  import java.util.Calendar;   public class MainActivity extends ActionBarActivity {       private AudioManager audio;     private PendingIntent pendingIntentam;     private PendingIntent pentdingIntentpm;     @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);          TextView textViewTime = (TextView) findViewById (R.id.textTime);         audio = (AudioManager)getSystemService(Context.AUDIO_SERVICE);          //ringer volume for the am.         Calendar calendaram = Calendar.getInstance();          calendaram.set(Calendar.HOUR_OF_DAY, 21);         calendaram.set(Calendar.MINUTE, 32);         calendaram.set(Calendar.SECOND, 0);         calendaram.set(Calendar.AM_PM,Calendar.PM);            Intent myIntent = new Intent(MainActivity.this, MyReceiver.class);         pendingIntentam = PendingIntent.getBroadcast(MainActivity.this, 0,myIntent,0);         AlarmManager alarmManageram = (AlarmManager)getSystemService(ALARM_SERVICE);         alarmManageram.set(AlarmManager.RTC, calendaram.getTimeInMillis(), pendingIntentam);       }      public class MyReceiver extends BroadcastReceiver {          @Override         public void onReceive(Context context, Intent intent) {                 Intent scheduledIntent = new Intent(context, myscheduleactivity.class);             scheduledIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);             context.startActivity(scheduledIntent);          }     }      public class myscheduleactivity extends Activity {          @Override         protected void onCreate(Bundle savedInstanceState) {             super.onCreate(savedInstanceState);             audio.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);         }     }        @Override     public boolean onCreateOptionsMenu(Menu menu) {          // Inflate the menu; this adds items to the action bar if it is present.         getMenuInflater().inflate(R.menu.main, menu);         return true;     }      @Override     public boolean onOptionsItemSelected(MenuItem item) {         // Handle action bar item clicks here. The action bar will         // automatically handle clicks on the Home/Up button, so long         // as you specify a parent activity in AndroidManifest.xml.         int id = item.getItemId();         if (id == R.id.action_settings) {             return true;         }         return super.onOptionsItemSelected(item);     }  } 
like image 382
andyADD Avatar asked Jun 13 '14 02:06

andyADD


People also ask

How do I run a WorkManager at a certain time?

You can schedule a work, with onetime initial delay or execute it periodically, using the WorkManager as follows: Create Worker class: public class MyWorker extends Worker { @Override public Worker. WorkerResult doWork() { // Do the work here // Indicate success or failure with your return value: return WorkerResult.

Is there a task scheduler for Android?

The job scheduler API. The Android 5.0 Lollipop (API 21) release introduces a job scheduler API via the JobScheduler class. This API allows to batch jobs when the device has more resources available. In general this API can be used to schedule everything that is not time critical for the user.

Why use WorkManager Android?

Use WorkManager for reliable work WorkManager is intended for work that is required to run reliably even if the user navigates off a screen, the app exits, or the device restarts. For example: Sending logs or analytics to backend services. Periodically syncing application data with a server.

When use WorkManager?

Android WorkManager is a background processing library which is used to execute background tasks which should run in a guaranteed way but not necessarily immediately. With WorkManager we can enqueue our background processing even when the app is not running and the device is rebooted for some reason.


1 Answers

To fire alarm everyday, at 21:32

private AlarmManager alarmMgr; private PendingIntent alarmIntent; ... alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); Intent intent = new Intent(context, AlarmReceiver.class); alarmIntent = PendingIntent.getBroadcast(context, 0, intent, 0);  // Set the alarm to start at 21:32 PM Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(System.currentTimeMillis()); calendar.set(Calendar.HOUR_OF_DAY, 21); calendar.set(Calendar.MINUTE, 32);  // setRepeating() lets you specify a precise custom interval--in this case, // 1 day alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),         AlarmManager.INTERVAL_DAY, alarmIntent); 

In this case, AlarmReceiver is the Broadcast Receiver and it already has a context, so you can directly set the ringer mode to silent from the Broadcast Receiver without starting an activity.

@Override     public void onReceive(Context context, Intent intent) {        AudioManager am = (AudioManager)getSystemService(Context.AUDIO_SERVICE);           am.setRingerMode(AudioManager.RINGER_MODE_SILENT); }   

Please be sure to add these permissions :

<uses-permission android:name="android.permission.WRITE_SETTINGS" ></uses-permission> <uses-permission android:name="android.permission.CHANGE_CONFIGURATION" ></uses-permission> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" ></uses-permission> 
like image 164
Shivam Verma Avatar answered Sep 30 '22 17:09

Shivam Verma