Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to wake up the android app at specific time?

Tags:

android

I want to wake up my whole android app daily at 9 am . I tried using alarm manager of android. But it calls pending intent. But in my case not pending intent , i want to wake full app. Following is my code . As i am beginner in android development any help is greatly appreciated .

public void SetAlarm() {
    Calendar cal = Calendar.getInstance();
    cal.set(Calendar.HOUR_OF_DAY, 09);
    cal.set(Calendar.MINUTE, 00);
    cal.set(Calendar.SECOND, 0);
    cal.set(Calendar.MILLISECOND, 0);
    AlarmManager alarmMgr = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
    Intent intent = new Intent(this, MainActivity.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
    alarmMgr.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent);
  } 

And in MainActivity class :

public class MainActivity extends Activity {

  String ua = "Mozilla/5.0 (Android; Tablet; rv:20.0) Gecko/20.0 Firefox/20.0";
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    WebView myWebView = (WebView) findViewById(R.id.webview);
    myWebView.setBackgroundColor(0);
    WebSettings webSettings = myWebView.getSettings();
    myWebView.getSettings().setUserAgentString(ua);
    webSettings.setJavaScriptEnabled(true);
    myWebView.setWebChromeClient(new WebChromeClient());
    webSettings.setDomStorageEnabled(true);
    myWebView.setWebViewClient(new MyAppWebViewClient());
    myWebView.loadUrl("file:///android_asset/www/index.html");
    SetAlarm();
  }
}

But at 9 am it is not waking my app up . Any mistakes ??

like image 484
SSS Avatar asked Feb 06 '14 04:02

SSS


2 Answers

If you are opening an activity you should be using PendingIntent.getActivity rather than PendingIntent.getBroadcast

like image 200
FabianCook Avatar answered Sep 28 '22 02:09

FabianCook


Follow below instruction.

1. MainActivity.java

 Intent myIntent = new Intent(getBaseContext(), MyReceiver.class);
            PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), 0, myIntent, 0);
            AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
            Calendar calendar = Calendar.getInstance();
            calendar.setTimeInMillis(System.currentTimeMillis());
            calendar.add(Calendar.SECOND, 10);
            long interval = 60 * 1000; //
            alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(), interval, pendingIntent);

Step 2: Boradcast Receiver for start Your Activity.

MyReceiver.java

 public class MyReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Intent myIntent =new Intent(context, MainActivity.class);
        myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(myIntent);
        System.out.println("Receiver Call");
    }


}

Step 3: Put into your manifest.xml

<receiver android:name=".MyReceiver"/>

Change interval valuse as per your requirement if require 24 hours then interval=24*60*60*1000.

This is General solution for stackoverflow user pleas modify as per your requirement.

It will work perfect.Happy coding.

like image 33
Harshid Avatar answered Sep 28 '22 03:09

Harshid