Swipping App из фона и хотите вызвать API
У меня есть один приемник 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 не вызывает. Я думаю, что этот получатель не вызывает.
Любая идея, пожалуйста, дайте мне знать. Если я что-то упустил, пожалуйста, предложите.
####################################### 31 ответ
Если я правильно понял, вы хотите сделать webrequest
когда приложение убито, а не когда устройство выключено.
Поэтому вы должны взглянуть на жизненный цикл Android Activity
Источник: https://developer.android.com/guide/components/activities/activity-lifecycle
Поместите свой код в onStop
или же onDestroy
, Нет необходимости в настраиваемом приемнике вещания.