2014-09-10 4 views
1

Я пытаюсь отправить уведомление через службу. Время уведомления устанавливается из таблицы базы данных, где у меня есть столбцы даты, времени и т. Д. Поэтому, когда 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(); 
    } 
} 
+0

где вы звоните уведомит()? –

+0

О, я забыл об этом, но, хотя после размещения notify(), он не работает :( – kg2152

ответ

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); 
    } 
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();