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