如何通过服务在android中重复特定时间的通知

时间:2016-07-20 08:11:25

标签: android service alarmmanager

我已经创建了一个通知面板但是存在一些问题。 我已为此创建了一项服务,但通知并未重复。 我不明白什么问题。 这是我的代码:

MainActivity.java

public class MainActivity extends Activity {
    Button b1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        b1=(Button)findViewById(R.id.button);
        b1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent myIntent = new Intent(MainActivity.this , Notification.class);
                AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
                PendingIntent pendingIntent = PendingIntent.getService(MainActivity.this, 0, myIntent, 0);

                Calendar calendar = Calendar.getInstance();
                calendar.set(Calendar.HOUR_OF_DAY, 12);
                calendar.set(Calendar.MINUTE, 00);
                calendar.set(Calendar.SECOND, 00);

                alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 20*1000 , pendingIntent);
            }
        });
    }
}

Notification.java

public class Notification extends Service{

    @Override
    public void onCreate() {

        Toast.makeText(this, "Notification", Toast.LENGTH_LONG).show();
        NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        @SuppressWarnings("deprecation")

        android.app.Notification notification = new android.app.Notification(R.drawable.ic_launcher,"New Message", System.currentTimeMillis());
        Intent notificationIntent = new Intent(this,NotificationView.class);
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,notificationIntent, 0);

        notification.setLatestEventInfo(this, "hahaha","U have recived new message", pendingIntent);
        notificationManager.notify(9999, notification);
    }

    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        return null;
    }
}

AndroidManifest.xml中我宣布了警报和终止服务的许可。

<uses-permission android:name="com.android.alarm.permission.SET_ALARM"/>
<service android:name=".Notification"></service>

有问题,当我点击按钮然后服务启动通知show.but通知不重复。

1 个答案:

答案 0 :(得分:1)

您使用相同的ID(在您的情况下为9999)进行通知。因此,当发出新通知时,它所做的就是替换现有通知。所以,你看,只有一个通知出现。要查看不同的通知,您应该在notify()方法中更改通知的ID。

另一种选择是检查是否已经显示通知(我相信此功能相对较新),然后更新现有通知,让用户知道已收到新通知。

修改 除此之外,您只需创建一次通知,因为您只初始化Notification服务一次。警报管理器下次重复它时会发现服务已经启动并且没有初始化新实例。您必须在下一个预定的时间段之前停止服务,以便警报管理器再次初始化它。

这无论如何都是不可取的。如果需要重复调​​度通知,请在循环内以例行的时间间隔在服务的后台线程中构造通知,直到满足某个条件。