如何在特定时间唤醒Android应用程序?

时间:2014-02-06 04:18:25

标签: android

我想在每天上午9点唤醒我的整个Android应用程序。我尝试使用android的报警管理器。 但它呼吁待定意图。但在我的情况下,没有待定的意图,我想唤醒完整的应用程序。 以下是我的代码。由于我是Android开发的初学者,所以非常感谢任何帮助。

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);
  } 

在MainActivity类中:

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();
  }
}

但是在上午9点它并没有唤醒我的应用程序。有什么错误吗?

5 个答案:

答案 0 :(得分:1)

介绍(BroadcastReceiver)再打开完整应用程序的步骤。

AlarmManager - > broadcastReceiver - >您的应用启动/启动页面

多数民众赞成。

答案 1 :(得分:1)

如果您要开展活动,则应使用PendingIntent.getActivity而不是PendingIntent.getBroadcast

答案 2 :(得分:1)

您希望每天设置而不是alarmMgr.set使用alarmMgr.setReapting闹钟。

答案 3 :(得分:1)

Intent intent = new Intent(con, YourAppReciever.class);
PendingIntent sender = PendingIntent.getBroadcast(con, 0, intent,
            PendingIntent.FLAG_UPDATE_CURRENT);

创建接收器并收听此广播。

public class YourAppReciever extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {

        context.startActivity(new Intent(context, MainActivity.class));
    }

}

答案 4 :(得分:0)

按照以下说明操作。

<强> 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);

第2步:  Boradcast Receiver开始您的活动。

<强> 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");
    }


}

第3步: 加入manifest.xml

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

根据您的要求更改间隔值如果需要24小时,则间隔= 24 * 60 * 60 * 1000。

这是根据您的要求修改stackoverflow用户请求的一般解决方案。

它会很完美。快乐编码。