1

私はAndroidを初めて使用し、助けが必要です。質問には、着信SMSをリッスンするバックグラウンドサービスが必要であり(ブロードキャストレシーバーを使用していますか?)、すぐに各SMSのSMS本文と電話番号を使用してhttp getリクエストを作成します到着したら(Webサーバーにアップロードするために)、これをゼロからやろうとしている、アイデアやコード例はありますか?:)

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

1

メインスレッドでネットワーク操作を実行することは許可されていないことがわかりました。NetworkOnMainThreadException が発生します。これには IntentService/AsyncTasks/Handler を使用する必要があります。

于 2012-10-05T07:59:02.567 に答える
0

これは、WCF Restful サービスと通信するサンプル コードです。クライアント コードは、次のようにする必要があります。

String uri = "http://youraddress:youport/" + serviceUri + "/"  + methodName;        
HttpPost request = new HttpPost(uri);
request.setHeader("Accept", "application/json");
request.setHeader("Content-type", "application/json");  
JSONStringer requestMsg = new JSONStringer(); //you must fill data to this object

StringEntity msg = new StringEntity(requestMsg.toString());
msg.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
msg.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));

request.setEntity(msg);
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpResponse response = httpClient.execute(request);

アプリケーション サーバーとして wcf サービスを使用する場合、これはサンプル コードです。

 [ServiceContract(Namespace = "http://schema.abc.com/2012/01/MyServices")]
public interface IMyServices{
    [OperationContract]
     [WebInvoke(Method = "POST",
               UriTemplate = "SubmitData",
                BodyStyle = WebMessageBodyStyle.WrappedRequest,
                ResponseFormat = WebMessageFormat.Json,
                RequestFormat = WebMessageFormat.Json)]
            IList<CustomeClass> SubmitData(CustomeClass message);
}

カスタムクラスとサービスメソッド本体を実装する必要が
あり、詳細を満たす必要がありますが、これは構成ファイル this ですが、主なパターンは this です

  <service name="MyServices">
            <endpoint address="" behaviorConfiguration="httpBehavior" binding="webHttpBinding"
              contract="IMyServices" />
          </service>

    <endpointBehaviors>
            <behavior name="httpBehavior">
              <webHttp/>
            </behavior>
          </endpointBehaviors>
于 2012-10-03T05:23:48.013 に答える