我制作了一个简单的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。有人可以帮帮我吗?
提前致谢,抱歉我的英语不好......
答案 0 :(得分: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
是包含您要更新的视图的文件。
答案 1 :(得分:0)
假设该服务具有用户活动上下文
Activity a=(Activity)userContext;
a.runOnUiThread(/*runnable method of activity which calls UpdateView() */);