setAlarm无法在特定时间后触发通知

时间:2015-12-08 21:22:18

标签: android

我差不多完成了,但是当点击设置的闹钟按钮在5秒后触发通知时,没有任何反应。

这是SetAlarm的OnClick方法

public void setAlarm(View view) {
    long alertTime = new GregorianCalendar().getTimeInMillis()+5*1000;
    Intent alertIntent = new Intent(this, AlertReceiver.class);
    //schedule to happen at later date
    AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    alarmManager.set(AlarmManager.RTC_WAKEUP, alertTime, PendingIntent.getBroadcast(this, 1, alertIntent, PendingIntent.FLAG_UPDATE_CURRENT));
}

这是我的接收者:

public class AlertReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
    createNotification(context, "Times up", "5 seconds has passed", "Alert");

}

public void createNotification(Context context, String msg, String msgText, String msgAlert) {
    PendingIntent notificIntent = PendingIntent.getActivity(context, 0, new Intent(context, MainActivity.class), 0);

    NotificationCompat.Builder mBuilder=new NotificationCompat.Builder(context)
            .setSmallIcon(R.drawable.not)
            .setContentTitle(msg)
            .setTicker(msgAlert)
            .setContentText(msgText);
    //intent to fire when notification clicked on
    mBuilder.setContentIntent(notificIntent);
    //how the person will be notified
    mBuilder.setDefaults(NotificationCompat.DEFAULT_SOUND);
    //cancel notification when clicked in the taskbar
    mBuilder.setAutoCancel(true);
    NotificationManager mNotificationManager= (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE);
    mNotificationManager.notify(1,mBuilder.build());


}

这是我的清单:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.yahyazeid.testnotification" >
<uses-permission android:name="com.android.alarm.permission.SET_ALARM"/>
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <service android:name=".AlertReceiver">
        <intent-filter> <action android:name="NOTIFICATION_SERVICE" />
        </intent-filter>
    </service>
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme" >
        <activity android:name=".MainActivity" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".MoreInfoNotification"
            android:label="More on notification"
            android:parentActivityName=".MainActivity">

        </activity>

    </application>

</manifest>

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

试试这段代码。看起来您没有在接收器中设置通知。

 public void scheduleAlarm(View V)
 {
// time at which alarm will be scheduled here alarm is scheduled at 1 day from current time, 
// we fetch  the current time in milliseconds and added 1 day time
// i.e. 24*60*60*1000= 86,400,000   milliseconds in a day       
Long time = new GregorianCalendar().getTimeInMillis()+5*1000;

// create an Intent and set the class which will execute when Alarm triggers, here we have
// given AlarmReciever in the Intent, the onRecieve() method of this class will execute when

            Intent intentAlarm = new Intent(this, AlarmReciever.class);

//Get the Alarm Service
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);

//set the alarm for particular time
alarmManager.set(AlarmManager.RTC_WAKEUP,time, PendingIntent.getBroadcast(this,1,  intentAlarm, PendingIntent.FLAG_UPDATE_CURRENT));
Toast.makeText(this, "Alarm Set for 5 seconds", Toast.LENGTH_LONG).show();

然后是接收者

public class Receiver extends Service {

@Override
public IBinder onBind(Intent intent) {
    return null;
}

@Override
public void onCreate() {
    Intent intent = new Intent(this, AlarmReceiver.class);
    PendingIntent pi = PendingIntent.getActivity(this, 0, intent, 0);
    NotificationCompat.Builder mBuilder = new    NotificationCompat.Builder(this)
        .setSmallIcon(R.drawable.depressiontest)
        .setContentTitle("Time has Expired")
        .setContentText("5 Seconds has passed.")
        .setVibrate(pattern)
        .setAutoCancel(true);

mBuilder.setContentIntent(pi);
mBuilder.setDefaults(Notification.DEFAULT_SOUND);
mBuilder.setAutoCancel(true);
NotificationManager mNotificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.notify(0, mBuilder.build());

}

然后在你的清单中

<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<service android:name=".Receiver">
    <intent-filter> <action android:name="NOTIFICATION_SERVICE" />
    </intent- filter>
</service>

使用get Calendar实例设置特定日期

Calendar cal = Calendar.getInstance();
//Setting date for 11/29/2016
cal.set(Calendar.DATE,29);  //1-31 days of week
cal.set(Calendar.MONTH,10);  //January starts at 0 (zero), December = 11
cal.set(Calendar.YEAR,2016);//year...
//Setting the specific hour/min/sec
cal.set(Calendar.HOUR_OF_DAY, 16);  //HOUR
cal.set(Calendar.MINUTE, 39);       //MIN
cal.set(Calendar.SECOND, 10);       //SEC


// Create a new PendingIntent and add it to the AlarmManager
Intent intent = new Intent(MainActivity.this, AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getService(MainActivity.this,     0,intent, 0);

//or if you start an Activity
//PendingIntent pendingIntent = PendingIntent.getActivity(MainActivity.this,  0,intent, 0);

AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent);

答案 1 :(得分:0)

更正的清单:

&#13;
&#13;
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.yahyazeid.testnotification" >
<uses-permission android:name="com.android.alarm.permission.SET_ALARM"/>
    <uses-permission android:name="android.permission.WAKE_LOCK" />
   
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme" >
        <activity android:name=".MainActivity" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".MoreInfoNotification"
            android:label="More on notification"
            android:parentActivityName=".MainActivity">

        </activity>
          <service android:name=".AlertReceiver">
       </service>

    </application>

</manifest>
&#13;
&#13;
&#13;