1

我制作了一个简单的 Android 应用程序,它会在收到 SMS 时更新其视图。这是我的接收器类的代码

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 回答