Как просыпаться сетевое соединение с помощью широковещательной радиостанции?

Я делаю приложение Android для отправки SMS в Telegram. Существует радиовещание, которое прослушивает SMS, а затем вызывает запрос HTTP-запроса на мой собственный сервер. Он работает нормально. Однако, когда экран выключен, Wi-Fi выключен. Когда есть SMS, нет сети для отправки HTTP-запроса.

Я искал о Вакелоке и Вифлоке. В этом случае оба они не применимы.

Есть способ пробудить сетевое соединение какое-то время, чтобы завершить HTTP-вызов?

Благодарю.

<приемник андроид: name = ".SmsReceiver" android: enabled = "true" android: exported = "true" > <фильтр-фильтр android: priority = "500" > <action android: name = "android.provider.Telephony. SMS_RECEIVED " /> </ intent-filter> </ receiver> .xml

public class SmsReceiver extends BroadcastReceiver {
@Override
public void onReceive(final Context context, Intent intent) {
    WifiLockManager.acquireWifiLock(context);

    RequestQueue queue = Volley.newRequestQueue(context);
    String url = "https://smsforwarder.mydomain.xyz/";

    Bundle bundle = intent.getExtras();
    if (bundle != null) {
        String sender = "";
        String message = "";

        SmsMessage[] sms = Telephony.Sms.Intents.getMessagesFromIntent(intent);
        for (int i=0; i < sms.length; i++) {
            SmsMessage smsMessage = sms[i];
            sender = smsMessage.getOriginatingAddress();
            message += smsMessage.getMessageBody();
        }

        Map<String, String> postParam = new HashMap<String, String>();
        postParam.put("sender", sender);
        postParam.put("message", message);

        JsonObjectRequest jsonObjReq = new JsonObjectRequest(
                Request.Method.POST,
                url,
                new JSONObject(postParam),
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        Toast.makeText(context, "SMS forwarded", Toast.LENGTH_SHORT).show();
                        WifiLockManager.releaseWifiLock();
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Toast.makeText(context, "SMS forward failed", Toast.LENGTH_SHORT).show();
                WifiLockManager.releaseWifiLock();
            }
        }
        ){
            @Override
            public Map<String, String> getHeaders() {
                HashMap<String, String> headers = new HashMap<String, String>();
                headers.put("Content-Type", "application/json; charset=utf-8");
                return headers;
            }
        };

        queue.add(jsonObjReq);
    }
}

SmsReceiver.java

AndroidManifest

}

android,

0

Ответов: 2


0

ПРЕДУПРЕЖДЕНИЕ. Не выполняйте сетевой запрос в широковещательном приемнике onReceive, потому что он будет запускаться и завершаться в течение некоторого времени, т.е. только от 8 до 10 секунд. Если вы хотите принудительно сделать это в onReceive, вы должны использовать метод goAsync в приемнике. Или вы можете вызвать любого сервисного или рабочего менеджера, например, фоновое обслуживание.


0

Приемник 1.Declare в <receiver android:name=".IncomingSms"> <intent-filter> <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter> </receiver>

AndroidManifest

2. Получите доступ к SMS-разрешению в AndroidManifest

<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.SEND_SMS" />

3. IncomingSms.javaфайл:

public class IncomingSms extends BroadcastReceiver {


// Get the object of SmsManager
final SmsManager sms = SmsManager.getDefault();

public void onReceive(Context context, Intent intent) {

    // Retrieves a map of extended data from the intent.
    final Bundle bundle = intent.getExtras();

    try {

        if (bundle != null) {

            final Object[] pdusObj = (Object[]) bundle.get("pdus");

            for (int i = 0; i < pdusObj.length; i++) {

                SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) pdusObj[i]);
                String phoneNumber = currentMessage.getDisplayOriginatingAddress();

                String senderNum = phoneNumber;
                String message = currentMessage.getDisplayMessageBody();

               // Write you code here


            } // end for loop
          } // bundle is null

    } catch (Exception e) {
        Log.e("SmsReceiver", "Exception smsReceiver" +e);

    }
}    

}

андроид,
Похожие вопросы
Яндекс.Метрика