В моей основной деятельности я создаю тревогу со следующим кодом:
Intent myIntent1 = new Intent(MainActivity.this, AlarmReceiver.class); PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, myIntent1,PendingIntent.FLAG_CANCEL_CURRENT); AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), constants.INTERVAL , pendingIntent);
Тогда в AlarmReceiver я вызвать службу со следующим кодом:
@Override public void onReceive(final Context context, Intent intent) { Intent in = new Intent(context, LocationPoll.class); context.startService(in); }
Ниже приведена LocationPoll.java, которая расширяет сервис и реализует приемник местоположения, который onLocationChanged делает f ollowing. Я использую GoogleApiClient для получения обновлений. Я просто передаю данные json и ожидаю ответа json.
@Override public void onLocationChanged(Location location) { String url = constants.BASE_URL+constants.TRACK_URL; JSONObject jsonBody = new JSONObject(); try { jsonBody.put("latitude", location.getLatitude()); jsonBody.put("longitude",location.getLongitude()); jsonBody.put("driver_id", constants.DRIVERID); } catch(Exception e){ } JSONRequest jr = new JSONRequest(jsonBody,url,this); jr.execute(); }
JSONRequest Asynct Задача выполняет следующие действия, чтобы сделать запись вызова с помощью HttpURLConnection:
URL urlConnection = new URL(url); System.setProperty("http.keepAlive", "false"); connection = (HttpURLConnection) urlConnection .openConnection(); connection.setDoOutput(true); connection.setChunkedStreamingMode(0); connection.setDoInput(true); connection.setRequestProperty("Accept", "*/*"); connection.setRequestProperty("Content-Type", "application/json; charset=UTF-8"); connection.setRequestProperty("Accept-Encoding","gzip, deflate"); connection.setRequestProperty("Accept-Language", "en-US,en;q=0.8,hi;q=0.6"); connection.setRequestProperty("Connection", "close"); connection.setRequestMethod("POST"); OutputStream os = connection.getOutputStream(); os.write(data.toString().getBytes("UTF-8")); os.close(); connection.connect(); _map= connection.getHeaderFields(); responsecode = connection.getResponseCode();
выше работает отлично, когда приложение находится на переднем плане или фонового состояния. Но когда приложение находится в состоянии уничтожения, состояние обновления местоположения выходит из строя с ошибкой: java.io.FileNotFoundException. Пожалуйста помогите.
Logcat:
10-14 18:50:03.806 17841-18041/? W/System.err﹕ java.io.FileNotFoundException: http://example.com
10-14 18:50:03.807 17841-18041/? W/System.err﹕ at com.android.okhttp.internal.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:197)
10-14 18:50:03.807 17841-18041/? W/System.err﹕ at java.net.URLConnection$DefaultContentHandler.getContent(URLConnection.java:1017)
10-14 18:50:03.807 17841-18041/? W/System.err﹕ at java.net.URLConnection.getContent(URLConnection.java:199)
10-14 18:50:03.807 17841-18041/? W/System.err﹕ at com.bikeninja.driver_app.asynctasks.JSONRequest.doInBackground(JSONRequest.java:70)
10-14 18:50:03.807 17841-18041/? W/System.err﹕ at com.bikeninja.driver_app.asynctasks.JSONRequest.doInBackground(JSONRequest.java:23)
10-14 18:50:03.807 17841-18041/? W/System.err﹕ at android.os.AsyncTask$2.call(AsyncTask.java:288)
10-14 18:50:03.807 17841-18041/? W/System.err﹕ at java.util.concurrent.FutureTask.run(FutureTask.java:237)
10-14 18:50:03.807 17841-18041/? W/System.err﹕ at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
10-14 18:50:03.807 17841-18041/? W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
10-14 18:50:03.807 17841-18041/? W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
10-14 18:50:03.809 17841-18041/? W/System.err﹕ at java.lang.Thread.run(Thread.java:818)
Укажите, что такое 'константы'. Это файл? как это разрешено? ... также, когда вы спрашиваете, вставьте свой Logcat в вопрос. – Bonatti
@Bonatti constants.INTERVAL - значение, установленное в миллисекундах –
, а не 'constants.INTERNAL', а' константы'. Что это такое, это файл? Кроме того, где находится ваш logcat – Bonatti