Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android绑定服务回调从未触发_Java_Android_Service_Serviceconnection - Fatal编程技术网

Java Android绑定服务回调从未触发

Java Android绑定服务回调从未触发,java,android,service,serviceconnection,Java,Android,Service,Serviceconnection,我试图创建一个非常简单的服务,为活动提供一组框架。 我遵循了绑定服务方法,创建了一个回调接口来为活动提供反馈 客户端(活动): public类MainActivity扩展AppCompatActivity实现FrameReadyCallBack{ 私人意图; 私人录像服务; 私有布尔边界=false; private ImageView surfaceView_video=null; 专用字符串videoPort=“5002”; 私有字符串videoServerAddr=“192.168.10.

我试图创建一个非常简单的
服务
,为
活动
提供一组框架。 我遵循了
绑定服务
方法,创建了一个回调接口来为
活动
提供反馈

客户端(活动):

public类MainActivity扩展AppCompatActivity实现FrameReadyCallBack{
私人意图;
私人录像服务;
私有布尔边界=false;
private ImageView surfaceView_video=null;
专用字符串videoPort=“5002”;
私有字符串videoServerAddr=“192.168.10.107”;
专用ServiceConnection ServiceConnection=null;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
surfaceView_video=findViewById(R.id.surfaceView_video);
serviceConnection=新的serviceConnection(){
@凌驾
服务连接上的公共无效(组件名称类名称,IBinder服务){
VideoService.ImagesCollectorBinder=(VideoService.ImagesCollectorBinder)服务;
videoService=binder.getService();
绑定=真;
videoService.registerCallBack(MainActivity.this);//注册
}
@凌驾
ServiceDisconnected上的公共无效(组件名称arg0){
绑定=假;
}
};
startVideoService();
}
@凌驾
public void frameReady(字节[]图像\u数据){
//TODO:创建图像并更新surfaceView_视频
}
公共无效startVideoService()
{
videoServiceIntent=新的Intent(这是VideoService.class);
videoServiceIntent.putExtra(VideoService.LOCAL_PORT_键,videoPort);
videoServiceIntent.putExtra(VideoService.LOCAL\u VIDEOSERVER\u ADDR\u KEY,videoServerAddr);
startService(视频服务意向);
}
@凌驾
受保护的void onStart(){
super.onStart();
bindService();
}
@凌驾
受保护的void onStop(){
super.onStop();
解除绑定服务();
}
私有void bindService(){
bindService(videoServiceIntent、serviceConnection、Context.BIND\u AUTO\u CREATE);
}
私有无效解除绑定服务(){
如果(绑定){
videoService.registerCallBack(null);//取消注册
解除绑定服务(serviceConnection);
绑定=假;
}
}
}
服务方:

公共类视频服务扩展服务{
公共静态最终字符串LOCAL\u PORT\u KEY=“video\u PORT”;
公共静态最终字符串LOCAL\u VIDEOSERVER\u ADDR\u KEY=“video\u server\u ADDR”;
专用静态最终int默认\u视频\u端口=5002;
私有静态最终int视频服务器\u RESPAWN=2000;
私有FrameReadyCallBack FrameReadyCallBack=null;
专用视频接收器视频接收器=空;
私有IBinder videoServiceBinder=新的videoServiceBinder();
@可空
@凌驾
公共IBinder onBind(意向){
返回videoServiceBinder;
}
@凌驾
公共布尔onUnbind(意图){
videoReceiver.kill();
返回super.onUnbind(intent);
}
@凌驾
公共int onStartCommand(Intent Intent、int标志、int startId){
final int localVideoPort=intent.getIntExtra(本地\端口\键,默认\视频\端口);
最终字符串videoServerAddr=intent.getStringExtra(本地\u VIDEOSERVER\u ADDR\u密钥);
videoReceiver=新的videoReceiver(videoServerAddr,localVideoPort);
videoReceiver.start();
退货服务。开始时不粘;
}
公共无效注册表回调(FrameReadyCallBack FrameReadyCallBack){
this.frameReadyCallBack=frameReadyCallBack;
}
公共类VideoServiceBinder扩展了Binder{
公共视频服务{
返回VideoService.this;
}
}
私有类视频接收器扩展线程{
私有布尔修剪=真;
专用int视频服务器端口;
私有字符串视频服务器地址;
私有int-bad_帧;
私有int帧;
私有国际链接(u respawn);;
私有框架状态;
公共视频接收器(字符串地址、int侦听端口){
视频服务器端口=监听端口;
视频服务器地址=地址;
}
公开募捐{
inetAddressServerAddr;
link_respawn=0;
试一试{
serverAddr=InetAddress.getByName(视频服务器地址);
}捕获(未知后异常e){
Log.e(getClass().getName(),e.getMessage());
e、 printStackTrace();
返回;
}
套接字=空;
数据输入流;
做{
坏帧=0;
帧=0;
状态=帧解码状态。空闲;
试一试{
套接字=新套接字(服务器地址、视频服务器端口);
stream=新的DataInputStream(新的BufferedInputStream(socket.getInputStream());
最终字节[]_数据=新字节[数据包大小];
最终字节[]图像数据=新字节[图像大小];
int _data _index=0;
同时(继续修剪){
if(stream.read(_data,0,_data.length)==0)
继续;
用于(字节_字节:_数据){
if(status==FrameDecodingStatus.Idle){
//等等
}else if(status==FrameDecodingStatus.Data){
//收集数据
}否则{
frameReadyCallBack.frameReady(_image_data);