Я пытаюсь использовать рабочий менеджер, поставленный в очередь из широковещательного приемника, для выполнения HTTP-запроса в фоновом режиме. При успешной отправке уведомления. Также отправка уведомления в блоке catch. Я впервые получаю уведомление из блока catch с java.net.Connect.Exception и иногда с java.net.SocketTimeoutException.
Хотелось бы узнать, почему я получаю исключение в первый разтолько и как я могу решить это. Это я видел в производстве устройств, принадлежащих Xiaomi, Oneplus, Oppo (версия Pie). Был бы признателен, если бы кто-нибудь помог мне.
Использование HttpsURLConnection для http-вызова.
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
conn.setReadTimeout(60000);
conn.setConnectTimeout(60000);
conn.setRequestMethod("POST");
conn.setDoInput(true);
conn.setDoOutput(true);
Uri.Builder builder = new Uri.Builder()
.appendQueryParameter("notificationData", notificationData)
.appendQueryParameter("date", currentDate)
.appendQueryParameter("deviceId", "note 6 pro");
String query = builder.build().getEncodedQuery();
OutputStream os = conn.getOutputStream();
BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(os, "UTF-8"));
writer.write(query);
writer.flush();
writer.close();
os.close();
conn.connect();
/* Get Response and execute WebService request*/
int statusCode = conn.getResponseCode();
/* 200 represents HTTP OK */
if (statusCode == HttpsURLConnection.HTTP_OK) {
// Read the input stream into a String
InputStream inputStream = conn.getInputStream();
StringBuffer buffer = new StringBuffer();
if (inputStream == null) {
// Nothing to do.
return null;
}
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String line;
while ((line = reader.readLine()) != null) {
buffer.append(line + "\n");
}
if (buffer.length() == 0) {
return null;
}
return buffer.toString();
}
} catch (IOException e) {
e.printStackTrace();
showNotification(getApplicationContext(), "in server call catch", e+" "+notificationData);
}