Фоновый сервис в Android, который генерирует уведомления об изменении базы данных

Я пытаюсь написать сервис, который работает в фоновом режиме и неоднократно обращается к веб-сервису, написанному на PHP. Этот веб-сервис возвращает мне JSON. Я получаю JSON, но не могу отправить уведомление.

Мой источник:

public class RepetedHttpCallService extends Service {

    private static String TAG = RepetedHttpCallService.class.getSimpleName();
    private MyThread mythread;
    public boolean isRunning = false;
    NotifyServiceReceiver notifyServiceReceiver;
    Notification noti;

    HttpPost httppost;
    HttpClient httpclient;
    @Override
    public IBinder onBind(Intent arg0) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        Log.d(TAG, "onCreate");   

        mythread  = new MyThread();
    }
    @Override
    public synchronized void onDestroy() {
        super.onDestroy();
        Log.d(TAG, "onDestroy");
        if(!isRunning){
            mythread.interrupt();
            mythread.stop();
        }       
    }
    @Override
    public synchronized void onStart(Intent intent, int startId) {
        super.onStart(intent, startId); 
        Log.d(TAG, "onStart");
        if(!isRunning){
            mythread.start();
            isRunning = true;
        }
    }

    class MyThread extends Thread{
        static final long DELAY = 5000;
        @Override
        public void run(){          
            while(isRunning){
                Log.d(TAG,"Running");
                try {                   
                    readWebPage();
                    Thread.sleep(DELAY);
                } catch (InterruptedException e) {
                    isRunning = false;
                    e.printStackTrace();
                }
            }
        }

    }

    public void readWebPage(){

        try {
        httpclient = new DefaultHttpClient();
        httppost = new HttpPost("http://10.0.2.2:91/xxxxxxx/webServices/getValue.php");
        ResponseHandler<String> responseHandler = new BasicResponseHandler();
        final String response = httpclient.execute(httppost,responseHandler);
        if(!response.equals(""))
        {
            createNotification();
        }
        Log.e("log_tag","POST URL response "+response.toString());

        } catch (Exception e) {
             e.printStackTrace();
        }
    }

    @SuppressLint("NewApi")
    public void createNotification() {
         int counter=0;
         NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);


            System.out.println("in notification");
           Intent intent = new Intent(this, MainActivity.class);
          // Intent intent1=new Intent(this,SendNotification.class);
            PendingIntent pIntent = PendingIntent.getActivity(getBaseContext(), counter, intent,  0);//FLAG_CANCEL_CURRENT,
                                                                                    //FLAG_ONE_SHOT,
                                                                                    //FLAG_UPDATE_CURRENT
            //PendingIntent pIntent1 = PendingIntent.getActivity(this, counter, intent1, 0);
            counter++;

            String c=String.valueOf(counter);
            noti = new Notification.Builder(getApplicationContext())
                .setContentTitle("New mail from " + "test@gmail.com")
                .setContentText("Sub "+counter)
                .setContentIntent(pIntent)
                .addAction(R.drawable.ic_launcher, "make", pIntent)
                .setTicker("got notification "+counter)
                .build();

            noti.flags = Notification.FLAG_AUTO_CANCEL;


            notificationManager.notify(counter, noti);

    }
}

Служба запускается и дает мне JSON каждые 5 секунд. Поскольку я называю это в отдельном потоке, я знаю, что я где-то здесь не прав, поскольку мне нужно передать контекст. Но я не уверен, как это сделать. Есть ли другой способ добиться этого?

1 ответ

Решение

Вам нужно установить значок для уведомления. Вы можете установить его, используя

.setSmallIcon() Обновленный фрагмент становится

noti = new Notification.Builder(getApplicationContext())
.setContentTitle("New mail from " + "test@gmail.com")
.setContentText("Sub "+counter)
.setContentIntent(pIntent)
.addAction(R.drawable.ic_launcher, "make", pIntent)
.setTicker("got notification "+counter)
.setSmallIcon(R.drawable.ic_launcher)
.build();
 noti.flags = Notification.FLAG_AUTO_CANCEL;`
Другие вопросы по тегам