私は現在、ブロードキャスト レシーバーを管理するサービスを持っています。この受信機は、オンとオフを切り替えることができます。
現時点では、SMS が受信されると OnReceive がトリガーされます。次に、SMS をサーバーにアップロードします。コードは正常に動作しますが、上記の 3.0 からネットワーク接続を Async タスクで実行する必要があると聞きました。そうでない場合でも、アップロードを別のスレッドに移動したいので、アップロード タスクは UI スレッドをブロックできません。(サービスを IntentService に移動するのにうんざりしています。これにより、ブロードキャスト レシーバー リークが発生します)
SMSBR = new BroadcastReceiver(){
@Override
public void onReceive(Context context, Intent intent) {
//START OF ONRECIVER************************
Bundle extras = intent.getExtras();
String strMessage = "";
if ( extras != null )
{
Object[] smsextras = (Object[]) extras.get( "pdus" );
for ( int i = 0; i < smsextras.length; i++ )
{
SmsMessage smsmsg = SmsMessage.createFromPdu((byte[])smsextras[i]);
String strMsgBody = smsmsg.getMessageBody().toString();
String strMsgSrc = smsmsg.getOriginatingAddress();
strMessage += "SMS from " + strMsgSrc + " : " + strMsgBody;
Log.d("Message", "is "+strMessage);
//***************************************************************
InputStream is = null;
try{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://mayar.abertay.ac.uk/~1001077/insert.php");
ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("DeviceNumber", telephonyManager.getLine1Number().toString()));
nameValuePairs.add(new BasicNameValuePair("SenderNumber", strMsgSrc));
nameValuePairs.add(new BasicNameValuePair("Message", strMsgBody));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();
Log.d("is = ", is.toString());
Log.d("In SMS", "Sender success");
if (Looper.getMainLooper().getThread() == Thread.currentThread()) {
Log.d("Message upload Running", "on UI");
} else {
Log.d("Message upload NOT running", "on UIx");
}
}catch (Exception e){
Log.e("Log_tag", "Error in http sms " + e.toString());
Log.d("In SMS", "Sender NOT success");
}
//****************************************************************
}
}
//END OF ON RECEIVE****************************
}
};