Пытаюсь отправить уведомление через сервис. Время уведомления устанавливается из таблицы базы данных, где у меня есть столбцы даты, времени и т. Д. Итак, когда 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();
    }
}
1
kg2152 10 Сен 2014 в 13:06

2 ответа

Лучший ответ

Просто вы можете использовать этот метод для отправки уведомления от сервиса.

Просто сделайте этот метод членом вашего класса обслуживания, а затем вы можете вызвать этот метод из класса обслуживания 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
Nikhilesh Patve 10 Сен 2014 в 11:29

Чтобы отправить уведомление, вам необходимо использовать ожидающее намерение

Образец кода для уведомления

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();
0
Nirmal 10 Сен 2014 в 09:12