Swipping App из фона и хотите позвонить API - PullRequest
0 голосов
/ 03 июля 2018

Я создал один приемник DeviceShutDownReceiver.

public class DeviceShutDownReceiver extends BroadcastReceiver {
    Context mContext;
    @Override
    public void onReceive(Context context, Intent intent)
    {
        mContext = context;

        //Make user offline when device is getting Shut down.
        new MakeUserOffline().execute();

    }

    private class MakeUserOffline extends AsyncTask<Void, Void, String> {
      //  ProgressDialog dialog = new ProgressDialog(Reg);
        //dialog.
      String result;
        @Override
        protected String doInBackground(Void... params) {
            Log.i("Check", "1()");
            String strUserId = BaseActivity.getUserId();
            int userId = Integer.parseInt(strUserId);
            final UserAvailabilityStatus obj = new UserAvailabilityStatus(userId,false);
            String webAddressToPost = Constants.BASE_URL + "DriverLocation/UpdateDriverOnlineStatus";
            try {
                Log.i("Check", "2()");
                HttpClient httpClient = new DefaultHttpClient();
                HttpPost httpPost = new HttpPost(webAddressToPost);

                Gson gson = new GsonBuilder().create();
                String jsonStr = gson.toJson(obj);

                httpPost.addHeader("User-Agent", "Custom-Agent 1.0");
                httpPost.addHeader(Constants.AUTH_HEADER_KEY,Constants.AUTH_HEADER_VALUE);
                StringEntity se = new StringEntity(jsonStr);
                se.setContentType("application/json;charset=UTF-8");
                se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,
                        "application/json;charset=UTF-8"));
                httpPost.setEntity(se);

                HttpResponse response = httpClient.execute(httpPost);
                Log.i("Check", "3()");
                if (response.getStatusLine().getStatusCode() == 200) {
                    // Get the response string
                    InputStream inputStream = null;
                    inputStream = response.getEntity().getContent();
                    if (inputStream != null)
                        result = convertInputStreamToString(inputStream);
                    else
                        result = "Failure";

                    UserAvailabilityStatus responseId = gson.fromJson(
                            result, UserAvailabilityStatus.class);
                   // int responseId = fooFromJson.Id;
                    Log.i("Check", result);
                    if ((null == responseId)) {
                        //  Log.w(TAG, String.format("onLoadFinished() : But null value returned!"));
                        //Toast.makeText(mContext, "Status not updated", Toast.LENGTH_LONG).show();
                    }
                    else {
                        Log.i("Check", result);
                        if(responseId.getResult().equalsIgnoreCase("Success.")) {

                            //Toast.makeText(mContext, "Status updated successfully", Toast.LENGTH_SHORT).show();
                            saveAvailableStatusSharedPref(false);
                            Log.i("Check", responseId.getResult());
                        }
                        else{
                            //Toast.makeText(mContext, "Status could not be updated", Toast.LENGTH_SHORT).show();
                        }
                    }
                }

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

            return null;
        }
        @Override
        protected void onPreExecute(){
            super.onPreExecute();
           // dialog.setMessage("Loading...");
           // dialog.show();
        }
        @Override
        protected void onPostExecute(String result) {
        }
    }

    private void saveAvailableStatusSharedPref(Boolean isAvailable){

        SharedPreferences sharedpreferences = mContext.getSharedPreferences(
                Constants.PREF_USER_AVAILABLE_STATUS, Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedpreferences.edit();
        editor.putBoolean(Constants.PREF_USER_AVAILABLE_STATUS, isAvailable);

        editor.commit();

    }

    private static String convertInputStreamToString(InputStream inputStream)
            throws IOException {
        BufferedReader bufferedReader = new BufferedReader(
                new InputStreamReader(inputStream));
        String line = "";
        String result = "";
        while ((line = bufferedReader.readLine()) != null)
            result += line;

        inputStream.close();
        return result;


    }

}

Я звоню этому получателю из файла манифеста.

<receiver android:name=".DeviceShutDownReceiver">
            <intent-filter>
                <action android:name="android.intent.action.ACTION_SHUTDOWN" />
            </intent-filter>
        </receiver>

Когда я перелистываю приложение из диспетчера задач, я хочу вызвать API, но этот API не вызывает. Я думаю, что этот получатель не вызывает.

Любая идея, пожалуйста, дайте мне знать. Если я что-то упустил, пожалуйста, предложите.

####################################### 3

1 Ответ

0 голосов
/ 03 июля 2018

Если я правильно понял, вы хотите сделать webrequest, когда приложение убито, а не когда устройство выключено.

Поэтому вы должны взглянуть на Android Activity Lifecycle

image

Источник: https://developer.android.com/guide/components/activities/activity-lifecycle

Поместите свой код в onStop или onDestroy. Нет необходимости в специальном приемнике вещания.

...