关于Callback函数,通知UI的问题

wade008 2013-03-26 10:15:00
有一个以下的类
class HYPERSIP_CALLBACK
{
public final static int HYPERSIP_EVENT_CALL_IN = 0;
public final static int HYPERSIP_EVENT_ANSWER = 1;
public final static int HYPERSIP_EVENT_ISVIDEODATA = 2;
public final static int HYPERSIP_EVENT_TERMINATED = 3;
public final static int HYPERSIP_EVENT_RENDERING = 4;

public void callback(int port, int event)
{
Log.e("HYPERSIP_API", "HYPERSIP_CALLBACK.callback, event = " + event);
switch(event)
{
case HYPERSIP_EVENT_RENDERING:
//will be transfer back to the JNI codes

case HYPERSIP_EVENT_TERMINATED:

break;
case HYPERSIP_EVENT_CALL_IN:
//这边会收到相信的消息,现在要通知更新UI,让主界面能调出一个新界面,这要如何实现
break;
case HYPERSIP_MESSAGE_INCOMING:
break;
}
}
}


这类是独立的,会在onCreate时去调用
HYPERSIP_CALLBACK m_callback = new HYPERSIP_CALLBACK();
HYPERSIP_API.HYPERSIP_RegisterCallback(m_callback);

问题见上面的红色注明,因为以前是写C++,刚入手android,有些不太清楚,麻烦大家了。
...全文
189 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wade008 2013-03-26
  • 打赏
  • 举报
回复
引用 3 楼 veardn 的回复:
一般我的做法是吧callback这个方法写在activity里,这个activity实现了接口 interface someInterface { public void callback(int port, int event);//这个callback最终要在handler里调用 } 然后HYPERSIP_CALLBACK加一个属性譬如callbackLi……
如果在activity里做,可以给个详细的吗?
wade008 2013-03-26
  • 打赏
  • 举报
回复
@Override
	public boolean handleMessage(Message msg) {
		switch(msg.what)
		{
		case 0:

		Log.d("ThreadId", "HandlerMessage:"
		+ String.valueOf(Thread.currentThread().getId()));
		break;
		}
		return false;
	}
楼上类我改成你写的那样,在activity中如上,收不到消息啊
veardn 2013-03-26
  • 打赏
  • 举报
回复
一般我的做法是吧callback这个方法写在activity里,这个activity实现了接口 interface someInterface { public void callback(int port, int event);//这个callback最终要在handler里调用 } 然后HYPERSIP_CALLBACK加一个属性譬如callbackListener,然后这个callbackListener就是相应的activity。 你这种做法很早以前我也用过 可以改成这样 class HYPERSIP_CALLBACK { public final static int HYPERSIP_EVENT_CALL_IN = 0; public final static int HYPERSIP_EVENT_ANSWER = 1; public final static int HYPERSIP_EVENT_ISVIDEODATA = 2; public final static int HYPERSIP_EVENT_TERMINATED = 3; public final static int HYPERSIP_EVENT_RENDERING = 4; private Handler handler; public void setHandler(Handler handler) { this.handler = handler; } public void callback(int port, int event) { Log.e("HYPERSIP_API", "HYPERSIP_CALLBACK.callback, event = " + event); switch(event) { case HYPERSIP_EVENT_RENDERING: //will be transfer back to the JNI codes case HYPERSIP_EVENT_TERMINATED: break; case HYPERSIP_EVENT_CALL_IN: //<span style="color: #FF0000;">这边会收到相信的消息,现在要通知更新UI,让主界面能调出一个新界面,这要如何实现</span> handler.sendEmptyMessage(event); break; case HYPERSIP_MESSAGE_INCOMING: break; } } }
wade008 2013-03-26
  • 打赏
  • 举报
回复
楼上可以说的详细些吗? 在上面的收下的消息 Looper looper = Looper.myLooper();//取得当前线程里的looper MyHandler mHandler =new MyHandler(looper) mHandler.removeMessages(0); String msgStr ="HYPERSIP_EVENT_TERMINATED"; Message m = mHandler.obtainMessage(1, 1, 1, msgStr); mHandler.sendMessage(m); MyHandle类定下如下 class MyHandler extends Handler{ public MyHandler(Looper looper){ super(looper); } @Override public void handleMessage(Message msg) {//处理消息 Log.e("handleMessage","handleMessage"); } } 这个是在界面的,但是没有收到消息啊
louyong0571 2013-03-26
  • 打赏
  • 举报
回复
搞个handler来做这些事情吧
wade008 2013-03-26
  • 打赏
  • 举报
回复
可以收到信息了,但是存在如下问题: 在activity中是这样实现的
HYPERSIP_CALLBACK m_callback = new HYPERSIP_CALLBACK();
MyHandler handler = new MyHandler(); 
m_callback.setHandler(handler);
class MyHandler extends Handler{             
	    
	    @Override
	    public void handleMessage(Message msg) {//处理消息
	    	Log.e("handleMessage","handleMessage");
	    	Intent intent = new Intent();
			intent.setClass(HelloActivity.this, CalloutActivity.class);
//如果CalloutActivity还没有创建就会出错,为什么不会自动创建呢?
			HelloActivity.this.startActivity(intent);
	     }            
	}

80,337

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧