Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.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 Don';t在API26和x2B上显示套接字消息;安卓设备_Java_Android_Sockets_Serversocket - Fatal编程技术网

Java Don';t在API26和x2B上显示套接字消息;安卓设备

Java Don';t在API26和x2B上显示套接字消息;安卓设备,java,android,sockets,serversocket,Java,Android,Sockets,Serversocket,我已经在旧设备上测试了我的应用程序API版本,并显示了套接字消息。但在26+版本上不起作用。我不明白为什么我的函数不适用于新版本 SocketMessageReceiver.java 公共类SocketMessageReceiver扩展了BroadcastReceiver{ 信息接收器接口{ void sendSocketMessage(字符串socketMessage); } 专用静态ISocketMessageReceiver ISocketMessageReceiver; 私有最终字符串T

我已经在旧设备上测试了我的应用程序API版本,并显示了套接字消息。但在26+版本上不起作用。我不明白为什么我的函数不适用于新版本

SocketMessageReceiver.java

公共类SocketMessageReceiver扩展了BroadcastReceiver{
信息接收器接口{
void sendSocketMessage(字符串socketMessage);
}
专用静态ISocketMessageReceiver ISocketMessageReceiver;
私有最终字符串TAG=“DEBUG”;
@凌驾
公共void onReceive(上下文、意图){
iSocketMessageReceiver.sendSocketMessage(intent.getBundleExtra(SocketService.BUNDLE_数据_键_值)、getString(SocketService.BUNDLE_数据_键_值));
}
公共无效注册表回调(ISocketMessageReceiver ISocketMessageReceiver){
this.iSocketMessageReceiver=iSocketMessageReceiver;
}
}
在我的MainActivity.java中

public void sendSocketMessage(字符串socketMessage){
lblMessage.setText(socketMessage);
setNotificationMessage(socketMessage,“Пöаааааa”);
}
更新:我在onCreate中添加了BroadcasReceiver,还需要做哪些更改

私有静态SocketMessageReceiver.ISocketMessageReceiver ISocketMessageReceiver;
专用ISOCKET接口ISOCKET接口;
专用SocketMessageReceiver SocketMessageReceiver;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main_活动);
BroadcastReceiver br=新的SocketMessageReceiver();
IntentFilter筛选器=新的IntentFilter(ConnectionManager.CONNECTIVITY_操作);
filter.addAction(意图.动作\u飞机\u模式\u更改);
此注册表接收程序(br,过滤器);
iSocketMessageReceiver=这个;
socketMessageReceiver=新的socketMessageReceiver();
socketMessageReceiver.registerCallback(iSocketMessageReceiver);
}

我不确定情况是否如此,但您可能正在清单中注册您的接收人

Android O在注册广播接收器方面有一些限制-通常,除了一些限制外,您不能在清单中注册隐式接收器

因此,您必须在广播期间注册您的接收器,或者坚持显式广播(这可以通过以下方式完成)

更新

这是您注册的接收者

this.registerReceiver(br, filter);
但在此之后,您将创建一个新的
SocketMessageReceiver
实例,并对其调用
registerCallback()

我认为您要做的是在注册接收广播的同一实例上调用
registerCallback()
。另外,几乎不需要为
ISocketMessageReceiver
设置变量,因为
活动实现了它

活动中的相关代码可能如下所示

类MyActivity扩展了AppCompatActivity
实现SocketMessageReceiver.ISocketMessageReceiver{
私有SocketMessageReceiver mSocketReceiver=null;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main_活动);
mSocketReceiver=新的SocketMessageReceiver();
mSocketReceiver.registerCallback(此);
IntentFilter筛选器=新的IntentFilter(ConnectionManager.CONNECTIVITY_操作);
filter.addAction(意图.动作\u飞机\u模式\u更改);
寄存器接收器(mSocketReceiver,过滤器);
}
}
当然,您必须小心,根据活动的生命周期回调,将活动注销为
SocketMessageReceiver
回调


无论如何,这段代码只是为了说明这个想法,所以我不建议在你的应用程序中使用它。

好的,我更新了我问题中的代码。我尝试在运行时使用注册,但遇到了问题,我刚开始学习java:)