如何通过服务发送通知

时间:2014-09-10 09:06:40

标签: java android

我正在尝试通过服务发送通知。通知的时间是从我有日期,时间等列的数据库表中设置的。因此,当System.currentTimeMillis等于数据库列的时间时,我试图将通知发送给用户。但是我的实施不起作用,有人可以帮助我吗?提前致谢

这是我的服务档案

public class MyService extends Service {

    private NotificationManager notificationManager;
    private DBHelper dbHelper;
    private SQLiteDatabase db;

    @Override
    public void onCreate() {
        Log.i("myLOgs", "Service: onCreate()");
        super.onCreate();
        dbHelper = new DBHelper(this);
        db = dbHelper.getReadableDatabase();
        notificationManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {

        Log.i("myLOgs", "Service: onStartCommand()");

        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Date date = new Date();
        String currentDateString = dateFormat.format(date);

        SimpleDateFormat timeFormat = new SimpleDateFormat("HH-mm");
        Date time = new Date();
        String currentTimeString = timeFormat.format(time);

        String[] columns = {DBHelper.DATE, DBHelper.TIME, DBHelper.EVENT};
        Cursor cursor = db.query(DBHelper.TABLE_NAME, columns, null, null, null, null, null);
        cursor.moveToFirst();
        do {
            String dateString = cursor.getString(cursor.getColumnIndex(DBHelper.DATE));
            String timeString  = cursor.getString(cursor.getColumnIndex(DBHelper.TIME));
            String eventString = cursor.getString(cursor.getColumnIndex(DBHelper.EVENT));
            if((currentDateString.equals(dateString)) && (currentTimeString.equals(timeString))) {
                Notification notification = new Notification(R.drawable.ic_launcher, eventString, System.currentTimeMillis());
            }
            if(cursor.moveToLast()) {
                cursor.moveToFirst();
            }
        }while(true);

        //return super.onStartCommand(intent, flags, startId);
    }

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

    @Override
    public void onDestroy() {
        super.onDestroy();
    }
}

2 个答案:

答案 0 :(得分:1)

只需您可以使用此方法从服务中发出通知。

只需将此方法作为服务类的成员,然后您可以从服务类onStartCommand或您需要的任何位置调用此方法。

我在项目中使用的完全工作......

  private int notificationID = 100;

  private void giveNotification(String notificationTitle, String bodytext)
  {
    NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
    @SuppressWarnings("deprecation")
    Notification notification = new Notification(R.drawable.ic_launcher, "New Message", System.currentTimeMillis());

    Intent notificationIntent = new Intent(this, DeliveryReport.class);

    notificationIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
    PendingIntent pendingIntent = PendingIntent.getActivity(this, notificationID, notificationIntent, 0);

    notification.setLatestEventInfo(getApplicationContext(), notificationTitle, bodytext, pendingIntent);
    notification.flags |= Notification.FLAG_AUTO_CANCEL;
    notificationManager.notify(notificationID++, notification);
  }

答案 1 :(得分:0)

要发送通知,您需要使用待定意图

通知的示例代码

Uri soundUri = RingtoneManager
            .getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
    Intent notification = new Intent(this, MainActivity.class);
    notification.putExtra("message", message);
    PendingIntent pIntent = PendingIntent.getActivity(this, 0,
            notification, PendingIntent.FLAG_ONE_SHOT);


    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
            context).setSmallIcon(R.drawable.logo)
            .setContentTitle("sample").setContentText(message)

            .setAutoCancel(true);

    mBuilder.setContentIntent(pIntent);

    NotificationManager mNotificationManager = (NotificationManager) context
            .getSystemService(Context.NOTIFICATION_SERVICE);
    mBuilder.getNotification().flags |= Notification.FLAG_AUTO_CANCEL;
    mNotificationManager.notify(new Random().nextInt(),
            mBuilder.getNotification());

    Ringtone r = RingtoneManager.getRingtone(context, soundUri);

    r.play();