2

私はAndroidとJavaが初めてです。次のコードは、SMS を送信して受信を待機します。このプロセスには 3 分ほどかかる場合があるため、SMS が受信されるまでは progressDialog が必要です。これを行うためのアプレットを送っていただけますか?

package com.examples.TOLD;
import android.app.Activity;
import android.os.Bundle;
import android.content.Intent;
import android.telephony.SmsManager;
import android.util.Log;
import android.widget.TextView;

public class Sms extends Activity {
/** Called when the activity is first created. */

static TextView smsReceive;

@Override
protected void onCreate(Bundle savedInstanceState) 
{       
    super.onCreate(savedInstanceState);
    setContentView(R.layout.sms);

    Intent i = getIntent();
    // Receiving the Data
    String reg = i.getStringExtra("reg");
    String port = i.getStringExtra("port");

    String smsMessage = 
        "REG=" + reg + 
        "PORT=" + port;

    // Show SMS sent message on screen 
    TextView smsSend = (TextView) findViewById(R.id.smsSend);
    smsSend.setText(smsMessage);
    Log.i("smsSend",String.valueOf(smsSend.getText()));
    // Send SMS message
    SmsManager sm = SmsManager.getDefault();
    String number = "5556";
    sm.sendTextMessage(number, null, smsMessage, null, null);

    // Receive SMS message
    smsReceive = (TextView) findViewById(R.id.smsReceive);

}
public static void updateMessageBox(String msg)
{
    smsReceive.append(msg);
}    
}

SMS を受信する別のクラスを次に示します。

package com.examples.TOLD;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.util.Log;


public class SmsReceiver extends BroadcastReceiver{

public void onReceive(Context context, Intent intent)
{
    Bundle bundle=intent.getExtras();

    Object[] messages=(Object[])bundle.get("pdus");
    SmsMessage[] sms = new SmsMessage[messages.length];

    for(int n=0;n<messages.length;n++){
        sms[n]=SmsMessage.createFromPdu((byte[]) messages[n]);
    }

    for(SmsMessage msg:sms){
        String num = msg.getOriginatingAddress();
        Log.i("SMS sender",num);
        if (num.equals("15555215556")) {
        Sms.updateMessageBox("\nFrom: " + msg.getOriginatingAddress() + 
                "\n" + "Message: " + msg.getMessageBody() + "\n");}           
    }
}
}
4

3 に答える 3

1

私はあなたがあなたのアプローチを再考することを試みることができると思います。ユーザーがSMSを最大3分間待つことは期待できません。したがって、コードは正しく見えますが(後で説明する静的メソッドcosの部分を除く)、メッセージが送信されると、アプリがメッセージを待機していることを示すメッセージが表示されます。SmsReceiver、あなたはSms活動と通信することができます。

ただし、いくつかの理由から、その静的メソッドを使用してアクティビティのコンテンツを更新しないでください(UIはバックグラウンドで更新できないか、SmsReceiver起動されたSMSアクティビティが存在しない場合でも最も重要です)。正しい方法は、受信者からインテントを送信することです。SMSメッセージの受信セクションのこのリンクに含まれているPDFで、詳細なステップバイステップの例を確認できます。

于 2012-08-16T08:09:12.937 に答える
0

送受信はメインスレッドで行うべきではないと思います。AsyncTask を使用して、バックグラウンドでメッセージを受信できます。タスクを開始する前にダイアログを表示し、受信後に閉じることができます

于 2012-08-16T08:02:12.013 に答える
0

簡単なバックグラウンド スレッドについては、http://developer.android.com/reference/android/os/AsyncTask.htmlを参照してください。

OnPreExecute で進行状況ダイアログを表示し、タスクが OnPostExecute に到達したら閉じるだけです。

于 2012-08-16T08:03:31.947 に答える