вызов api и отображение уведомлений с помощью класса обслуживания в Android

#android #service

#Android #Обслуживание

Вопрос:

 public class AndroidServiceStartOnBoot extends Service {

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


    @Override
    public void onCreate() {
        super.onCreate();

    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
          showToast();
        return START_REDELIVER_INTENT;
    }


    private Runnable mRunnable = new Runnable() {
        @Override
        public void run() {

            showToast();


        }
    };



    private void showToast() {
        logInRequest();
        int icon = R.drawable.nicon;
        long when = System.currentTimeMillis();
        Intent intent = new Intent();
        PendingIntent pendingIntent = PendingIntent.getActivities(AndroidServiceStartOnBoot.this, 0, new Intent[]{intent}, 0);
        Notification notification = new Notification(icon, "Custom Notification", when);


        NotificationManager mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

        RemoteViews contentView = new RemoteViews(getPackageName(), R.layout.notification);
        contentView.setImageViewResource(R.id.image, R.drawable.nicon);
        contentView.setTextViewText(R.id.title, "Custom notification");
        contentView.setTextViewText(R.id.text, status);
        contentView.setOnClickPendingIntent(R.id.closeOnFlash, pendingIntent);
        notification.contentView = contentView;

        Intent notificationIntent = new Intent(this, MainActivity.class);
        PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
        notification.contentIntent = contentIntent;

        notification.flags = Notification.FLAG_AUTO_CANCEL; //Do not clear the notification
        notification.defaults |= Notification.DEFAULT_LIGHTS; // LED
        notification.defaults |= Notification.DEFAULT_VIBRATE; //Vibration
        notification.defaults |= Notification.DEFAULT_SOUND; // Sound

        mNotificationManager.notify(0, notification);

        new Handler().postDelayed(mRunnable, 4000);

    }


    private void logInRequest() {


        SharedPreferences tprefs = getSharedPreferences("com.nahid.com.gsdambassadorpractice", MODE_PRIVATE);
        String token = tprefs.getString("token", "false");


        String url = Common.baseUrl   "ambassadorcall/api/call/addcard";
        Map<String, String> param = new HashMap<String, String>();
        param.put("token", token);
        param.put("cardno", "125847");


        JSON2Request json2Request = new JSON2Request(Request.Method.POST, url, param, logInListeneryy());
        RequestManager.showProgressDlg(AndroidServiceStartOnBoot.this);
        RequestManager.addRequest(json2Request, this);

    }


    private Response.Listener<JSONObject> logInListeneryy() {
        return new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                RequestManager.dismissProgressDlg();

                JSONObject jobj = response;

                try {
                    if (jobj.getString("status").equals("success")) {


                        status = jobj.getString("status");

                        Toast.makeText(AndroidServiceStartOnBoot.this, "Working", Toast.LENGTH_LONG).show();

                        //String redirect =stepManage.gotostep(LoginActivity.this,jobj.getString("nextstep"));


/**
 String token = tprefs.getString("token", "false");
 Toast.makeText(LoginActivity.this, token, Toast.LENGTH_LONG).show();
 **/


                    } else {
                        Toast.makeText(AndroidServiceStartOnBoot.this, jobj.getString("message"), Toast.LENGTH_LONG).show();
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        };
    }


    @Override
    public void onDestroy() {
        super.onDestroy();
        Toast.makeText(this, "Service Destroyed", Toast.LENGTH_LONG).show();
    }

}
  

Я хочу создать службу, которая будет отображать пользовательские уведомления с помощью диспетчера уведомлений.Но я хочу обновить уведомление, используя api из класса обслуживания.Даже когда приложение не используется.Как я могу это сделать в Android, пожалуйста, помогите мне..

Комментарии:

1. опубликуйте свой код, что вы сделали до сих пор

2. я опубликовал свой код. пожалуйста, помогите сейчас. с помощью функции loginrequest() я вызываю api, а с помощью loginListneryy() я получаю результат от сервера. я хочу показать этот результат в уведомлении.

Ответ №1:

Вы можете добиться этого, постоянно запуская фоновую службу и показывая уведомление при некоторых условиях. Как и в моем приложении, у меня есть сервис и класс для уведомлений, и при определенных условиях я вызываю класс уведомлений из своего сервиса.

Комментарии:

1. да, я использую фоновую службу. Служба запускается, когда телефон загружается полностью. Но я хочу, чтобы я хотел вызвать api через определенный интервал времени, а затем, проанализировав данные json, я обновлю уведомление с помощью диспетчера уведомлений. Но я хочу, чтобы все происходило из класса обслуживания. Если вы, пожалуйста, помогите мне.

2. Для этого вы можете использовать таймеры, в которых вы можете установить нужное время, а затем вызвать свой api и уведомить пользователя.

3. Я хочу знать в классе обслуживания, где я буду использовать свой api. Метод onStartCommand или метод onHandleIntent. Я был бы очень рад, если бы вы дали мне пример кода