【发布时间】:2014-06-14 15:12:16
【问题描述】:
我想创建一个应用程序,每隔一小时通知用户一次。为了做到这一点,我使用了 AlarmManager 并使用 setRepeating() 来重复警报,并且我提供了注册广播接收器的 Intent。
这很好用。我每小时都会收到通知。
在按钮点击事件上设置警报。
但是,一旦我从最近的活动列表中清除我的应用程序,我就不会收到通知。我再次打开应用程序并在那个时候重新创建了警报,它给了我通知。
即使我的应用程序已关闭,我应该怎么做才能收到通知。即使我的应用在后台没有任何活动运行。
是否可以使用AlarmManager。
这是我的代码:
活动类:
package com.example.positionexample;
import java.util.Calendar;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.ActivityManager.RunningServiceInfo;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity {
Button bt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bt=(Button) findViewById(R.id.button1);
bt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Calendar cal = Calendar.getInstance();
//startService(new Intent(getApplicationContext(), MyService.class));
Intent intent = new Intent(getApplicationContext(), MyBroadcastReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 234324243, intent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 30*1000, pendingIntent);
}
});
}
}
广播接收器类:
package com.example.positionexample;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.widget.Toast;
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
generateNotification( context, intent);
Log.e("","Don't panik but your time is up!!!!.");
Toast.makeText(context, "Don't panik but your time is up!!!!.",
Toast.LENGTH_LONG).show();
}
public void generateNotification(Context context, Intent intent)
{
NotificationManager notifManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE);
Notification note = new Notification(R.drawable.ic_launcher, "New E-mail", System.currentTimeMillis());
PendingIntent bintent = PendingIntent.getActivity(context, 0, new Intent(context, MainActivity.class), 0);
note.setLatestEventInfo(context, "New E-mail", "You have one unread message.", bintent);
notifManager.notify(123, note);
}
}
Manfest 文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.positionexample"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="10" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<!-- <service
android:enabled="true"
android:name="com.example.positionexample.MyService"
/> -->
<activity
android:name="com.example.positionexample.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name="MyBroadcastReceiver" >
</receiver>
</application>
</manifest>
【问题讨论】:
-
您找到解决问题的方法了吗?我也有同样的问题。它只会在我打开我的应用程序时通知。