1

SMSを受信するとビューを更新するシンプルなAndroidアプリを作成します。これは私のレシーバークラスのコードです

public class SMSReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
    // TODO Auto-generated method stub
    intent.setClass(context, SMSReceiverService.class);
    intent.putExtra("result", getResultCode());
    WakefulIntentService.sendWakefulWork(context.getApplicationContext(), intent);
}

}

そのクラスはSMSReceiverServiceクラスを呼び出して、着信SMSを処理し、以下に示すメソッドnotifyMessageReceivedを実行します。

private void notifyMessageRecevied(SMS message) {
    if(!isInMyApps()) {
                launchPopUp();
    }
    else {
        //updating view should go here
    }
}

問題は、アクティビティ(SMSReceiverServiceクラスではなく別のクラスにある)のビューを更新する方法がわからないことです。アクティビティのTextViewを更新しようとすると、CalledFromWrongThreadExceptionがスローされました。誰か助けてくれませんか?

よろしくお願いします、そして私の悪い英語について申し訳ありません...

4

2 に答える 2

3

必要なアクティビティのインスタンスを保持するアクティビティ変数を作成できます。

SMSReceiverあなたが呼びたいもの)で:

SMSReceiverService.setMainActivity(this);

SMSReceiverService更新したいもの):

public static SMSReceiver smsActivity;
public static void setMainActivity(SMSReceiver activity) 
{
    smsActivity = activity;      
}

...

smsActivity.runOnUiThread(new Runnable() {
     public void run() {    
             try{
                    smsActivity.textView.setText("");
             }
             catch{}
     }
}

更新するビューを含むファイルであると想定SMSActivityします。

于 2013-03-07T17:26:30.873 に答える
0

サービスにユーザーアクティビティのコンテキストがあると仮定します

Activity a=(Activity)userContext;
a.runOnUiThread(/*runnable method of activity which calls UpdateView() */);
于 2013-03-07T17:38:08.310 に答える