0

我有以下 android 代码,我在服务中有一个短信广播接收器,它等待收到的短信,然后在接收到它时,它会显示一个 toast,然后它应该向指定的 url 发出获取请求,一切正常预期但上传消息操作没有发生,在这里难住了。

public class ReceiverContainer extends Service{

 public SMSreceiver mSMSreceiver;
 public IntentFilter mIntentFilter;

@Override
public void onCreate()
{
    super.onCreate();

    //SMS event receiver
    mSMSreceiver = new SMSreceiver();
    mIntentFilter = new IntentFilter();
    mIntentFilter.addAction("android.provider.Telephony.SMS_RECEIVED");
    registerReceiver(mSMSreceiver, mIntentFilter);
}

@Override
public void onDestroy()
{
    super.onDestroy();

    // Unregister the SMS receiver
    unregisterReceiver(mSMSreceiver);
    mSMSreceiver = null;
}

@Override
public IBinder onBind(Intent intent) {
    // TODO Auto-generated method stub
    return null;
}

public class SMSreceiver extends BroadcastReceiver
{
     public void Action(Context context,Intent intent) throws ClientProtocolException, URISyntaxException, IOException
        {
         Bundle myBundle = intent.getExtras();
         SmsMessage [] messages = null;
         String strMessage = "";
         String msgFrom = "";
         String msgText = "";

         if (myBundle != null)
         {
             Object [] pdus = (Object[]) myBundle.get("pdus");
             messages = new SmsMessage[pdus.length];

             for (int i = 0; i < messages.length; i++)
             {
                 messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
                 strMessage += "SMS From: " + messages[i].getOriginatingAddress();
                 msgFrom += messages[i].getOriginatingAddress();
                 strMessage += " : ";
                 strMessage += messages[i].getMessageBody();
                 msgText += messages[i].getMessageBody();
                 strMessage += "\n";
             }

             Toast.makeText(context, strMessage, Toast.LENGTH_SHORT).show();

             uploadMessage(context,msgFrom,msgText);

         }
        }

    @Override
    public void onReceive(Context context, Intent intent)
    {
            try {
                Action(context,intent);
            } catch (ClientProtocolException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (URISyntaxException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    }

}

public void uploadMessage(Context context,String number,String msg) throws URISyntaxException, ClientProtocolException, IOException
{

    HttpResponse response = null;
    HttpClient client = new DefaultHttpClient();


    Uri.Builder path = new Uri.Builder();
    path.scheme("http");
    path.authority("technonectar11.com");
    path.path("sms");
    path.appendQueryParameter("fromno" , number);
    path.appendQueryParameter("text" , msg);
    path.appendQueryParameter("uname" , "vijay");

    HttpGet request = new HttpGet(path.build().toString());     
    //request.setURI(new URI("http://www.technonectar11.com/sms/insertsms?fromno="+number+"&text="+msg+"&uname=vijay"));
    response = client.execute(request);

    String result = convertStreamToString(response.getEntity().getContent());

    Toast.makeText(context, result, Toast.LENGTH_SHORT).show();

}

public static String convertStreamToString(InputStream inputStream) throws IOException
{
    if (inputStream != null)
    {
        Writer writer = new StringWriter();

        char[] buffer = new char[1024];
        try
        {
            Reader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"),1024);
            int n;
            while ((n = reader.read(buffer)) != -1)
            {
                writer.write(buffer, 0, n);
            }
        }
        finally
        {
            inputStream.close();
        }
        return writer.toString();
    }
    else
    {
        return "";
    }
}

}

4

2 回答 2

0

您不得在主线程上发出 Internet 请求。使用AsyncTasks发出请求。

于 2012-10-01T08:27:23.670 回答
0

在 manfiest 文件中声明INTERNET 许可

试试 HttpPost

httpclient=new DefaultHttpClient();
     HttpPost httppost=new HttpPost(URL);

     HttpResponse res = null;
        try {
            res = httpclient.execute(httppost);
            System.out.println("asa "+res);

        } catch (ClientProtocolException e1) {
            e1.printStackTrace();
        } catch (IOException e1) {
            e1.printStackTrace();
        } 
于 2012-10-01T08:52:43.137 回答