Message的实时显示 对sms进行实时监视SMSReceiver,如果收到短消息,则立即向主线程报告,通知主线程刷新界面。在这里,主线程如何接受这个通知呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 刷新界面可以用,message handler来做 对 handler直接sendmessage就可以了。 我的代码大致是这样子的: public class SMSReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(strAction)) { // 有短信接收 // 开始想主线程发送消息 MainActivity mainActivity = new MainActivity(); Handler hanlder = mainActivity.getSmsHandler();// 得到mainActivity中Handler实例 Message message = new Message(); message.what = 1; hanlder.sendMessage(message);//发送消息 } }} public class MainActivity extends ListActivity { // 短信删除提示信息句柄 public Handler smsHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch(msg.what) { case 1:// 在这里耍新界面 重新加载listview // 可是嘞 刷新不了啊 break; } } }; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // ..... }} 请大家帮忙看下哪里 代码写的不合适哦 谢谢。 你刷新的动作是怎么做的?ListView.invadite()是不行的。如果你的adpater是继承BaseAdapter的那么调一次notifyDataSetChanged(),或者直接重新setAdapter一次。 case 1: 我是在这个地方重新查询数据库,然后重新setAdapter, 问题出在执行 myMessageDao = DaoFactory.getMessageDao(this);时出错错误提示:myMessageDao 为null break; 我觉得应该还是由SMSReceiver 发送消息的问题、,因为,我在显示界面上加一个刷新按钮,执行同样的代码, 操作数据库就米有问题啊、 问题出现在这两句: // 有短信接收 // 开始想主线程发送消息 MainActivity mainActivity = new MainActivity(); Handler hanlder = mainActivity.getSmsHandler();// 得到mainActivity中Handler实例你怎么能自己new一个MainActivity呢??这个新的MainActivity实例和你当前界面中显示的MainActivity根本不是一个东西,所以你更新的所有UI状态在界面上你都无法看到。正确的做法,在MainActivity中注册SMSReceiver,然后可以直接使用SMSReceiver 中的Handler来sendMessage。 楼上我的回复有无,最后一句更正如下:正确的做法,在MainActivity中注册SMSReceiver,然后可以直接使用MainActivity中的Handler来sendMessage。 LS说的对,都没有发现,这个的确有问题啊。acitivty不是这么用的啊 再更正一下吧,说得更准确一些:SMSReceiver写成MainActivity的内部类。 对,这才是正确的做法。 MainActivity mainActivity = new MainActivity(); Handler hanlder = mainActivity.getSmsHandler();// 得到mainActivity中Handler实例 这里得到的handler 与你的 public class MainActivity extends ListActivity { // 短信删除提示信息句柄 public Handler smsHandler = new Handler() { @Override public void handleMessage(Message msg) {这里面的handler根本就不是同一个东西,怎么可能能够通信 SMSReceiver是一个BroadcastReceiver, 如果把 SMSReceiver定义成内部类的话,该如何注册和解除注册嘞,在此程序中,MainActivity只是一个普通的activity,如何用户关闭掉了,是不是就不能监听到收到的SMS喽、 因为SMSReceiver就是监听sms的 SMSReceiver是一个BroadcastReceiver, 如果把 SMSReceiver定义成内部类的话,该如何注册和解除注册嘞,在此程序中,MainActivity只是一个普通的activity,如何用户关闭掉了,是不是就不能监听到收到的SMS喽、 因为SMSReceiver就是监听sms的 context.registerReceiver()和context.unregisterReceiver()来在代码里面注册和解除receiver。这样写的话,当然是activity不在的时候,receiver就不工作了,本来你这儿reciver就是用来刷新UI的,activity不在了,UI也不用刷新了啊 首先 谢谢您 的 跟帖回答!我的本意是 当MainActivity存在的时候,自动刷新界面, 被销毁的时候就不刷新了。 而且 还要时刻监视sms, 所以 Receiver 和 MainActivity在这儿不能搭配使用了、 还得注册全局的Receiver, 所以, 只有在MainActivity中 使用TimerTask 和 Handler了, 问题解决了 哈哈、 Android webView 加载网页时,使用本地图片替换网页内的图片 Android中的SearchView,如何去掉其后面的那个X按钮? 重编译framework-res.apk Android相对布局RelativeLayout问题 如何实现图片压缩 android 设定初期值的问题 android中如何用opengl实现图中网格功能 求Android游戏开发书籍 释放资源问题 '""C:\Program' 不是内部或外部命令,也不是可运行的程序 android中编写XML文件时候代码提示没有提示 如何学习Android的应用框架?
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(strAction)) {
// 有短信接收
// 开始想主线程发送消息
MainActivity mainActivity = new MainActivity();
Handler hanlder = mainActivity.getSmsHandler();// 得到mainActivity中Handler实例
Message message = new Message();
message.what = 1;
hanlder.sendMessage(message);//发送消息
}
}
}
public class MainActivity extends ListActivity { // 短信删除提示信息句柄
public Handler smsHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch(msg.what) {
case 1:// 在这里耍新界面 重新加载listview
// 可是嘞 刷新不了啊
break;
}
}
};
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// .....
}
}
请大家帮忙看下哪里 代码写的不合适哦 谢谢。
case 1:
我是在这个地方重新查询数据库,然后重新setAdapter,
问题出在执行 myMessageDao = DaoFactory.getMessageDao(this);时出错
错误提示:myMessageDao 为null
break;
我觉得应该还是由SMSReceiver 发送消息的问题、,因为,我在显示界面上加一个刷新按钮,执行同样的代码, 操作数据库就米有问题啊、
// 开始想主线程发送消息
MainActivity mainActivity = new MainActivity();
Handler hanlder = mainActivity.getSmsHandler();// 得到mainActivity中Handler实例你怎么能自己new一个MainActivity呢??这个新的MainActivity实例和你当前界面中显示的MainActivity根本不是一个东西,所以你更新的所有UI状态在界面上你都无法看到。正确的做法,在MainActivity中注册SMSReceiver,然后可以直接使用SMSReceiver 中的Handler来sendMessage。
正确的做法,在MainActivity中注册SMSReceiver,然后可以直接使用MainActivity中的Handler来sendMessage。
acitivty不是这么用的啊
MainActivity mainActivity = new MainActivity();
Handler hanlder = mainActivity.getSmsHandler();// 得到mainActivity中Handler实例
这里得到的handler 与你的
public class MainActivity extends ListActivity { // 短信删除提示信息句柄
public Handler smsHandler = new Handler() {
@Override
public void handleMessage(Message msg) {这里面的handler根本就不是同一个东西,怎么可能能够通信
SMSReceiver是一个BroadcastReceiver, 如果把 SMSReceiver定义成内部类的话,该如何注册和解除注册嘞,
在此程序中,MainActivity只是一个普通的activity,如何用户关闭掉了,是不是就不能监听到收到的SMS喽、 因为SMSReceiver就是监听sms的
SMSReceiver是一个BroadcastReceiver, 如果把 SMSReceiver定义成内部类的话,该如何注册和解除注册嘞,
在此程序中,MainActivity只是一个普通的activity,如何用户关闭掉了,是不是就不能监听到收到的SMS喽、 因为SMSReceiver就是监听sms的
这样写的话,当然是activity不在的时候,receiver就不工作了,本来你这儿reciver就是用来刷新UI的,activity不在了,UI也不用刷新了啊
首先 谢谢您 的 跟帖回答!我的本意是 当MainActivity存在的时候,自动刷新界面, 被销毁的时候就不刷新了。
而且 还要时刻监视sms, 所以 Receiver 和 MainActivity在这儿不能搭配使用了、 还得注册全局的Receiver, 所以, 只有在MainActivity中 使用TimerTask 和 Handler了, 问题解决了 哈哈、