我想在 BroadcastReceiver 的 OnReceive 事件上向 URL 发送 HTTP POST 请求,但我收到异常 NetworkOnMainThreadException ,如何在 OnReceive 事件上运行线程。

public void onReceive(Context context, Intent 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();

                String msg = message.substring(5);

                Log.i("SmsReceiver", "senderNum: "+ senderNum + "; message: " + msg);

                int duration = Toast.LENGTH_LONG;
                Toast toast = Toast.makeText(context, "senderNum: "+ senderNum + ", message: " + msg, duration);
                toast.show();
                sendhttprequest("http://example.com/product", "rl", "12345678");
            }
        }
    }
    catch (Exception e) {
        Log.e("SmsReceiver", "Exception smsReceiver" +e);

    }

}

sendhttprequest 是用来调用http post 请求的函数。

请帮忙。

最佳答案

请记住,一旦 onReceive() 返回,BroadcastReceiver 可能会被系统终止。这意味着任何卸载到异步任务/线程的工作都不能保证完成。
考虑调用 BroadcastReceiver:goAsync() 以使进程保持 Activity 状态最多 10 秒。
在此处阅读更多信息:http://developer.android.com/reference/android/content/BroadcastReceiver.html#goAsync()

关于android - 如何在 BroadcastReceiver OnReceive 事件上执行 HTTP POST 请求,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21000458/

10-12 13:43