在过去的 3-4 个月中,我一直在 Crashlytics 中看到这种崩溃,仅适用于具有奥利奥和馅饼的 OnePlus 制造的设备(一个、3、5,5T、6、6T)。以前的android版本没有发生这种情况。
Fatal Exception: android.app.RemoteServiceException: can't deliver broadcast
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1844)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6892)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:537)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Run Code Online (Sandbox Code Playgroud)
我在stackoverflow中查看了不同的帖子,重新检查了与Firebase Messaging相关的所有代码并更新到最新版本的firebase,但没有运气。如果有人遇到同样的崩溃,请帮忙。提前致谢。
编辑 1:可能的原因可能是,我将通知图标放在 mipmap 而不是 drawable 中。 https://forums.oneplus.com/threads/app-notification-provokes-continues-system-ui-crashes-and-possible-corruption-of-the-os.713575/
https://issuetracker.google.com/issues/69109923
但是,如果我将通知放在 drawable 中,那么我该如何修复资源 ID,以免再次遇到下面提到的问题(为了修复资源 ID,我将通知图标从 drawable 移到了 mipmap)。最近发布的 gradle 忽略了 public.xml:
如何修复:android.app.RemoteServiceException:从包中发布的错误通知*:无法创建图标:StatusBarIcon
notifications android broadcast android-resources remoteserviceexception
我想每秒从net tcp WCF服务向所有客户端发送通知消息,你可以说广播吗?
有用的答案之后
我编写了以下方法,将通知(心跳)发送给所有连接的用户
foreach (IHeartBeatCallback callback in subscribers)
{
ThreadPool.QueueUserWorkItem(delegate(object state)
{
ICommunicationObject communicationCallback = (ICommunicationObject)callback;
if (communicationCallback.State == CommunicationState.Opened)
{
try
{
callback.OnSendHeartBeat(_heartbeatInfo.message, _heartbeatInfo.marketstart,_heartbeatInfo.marketend, _heartbeatInfo.isrunning, DateTime.Now);
}
catch (CommunicationObjectAbortedException)
{
Logger.Log(LogType.Info, "BroadCast", "User aborted");
communicationCallback.Abort();
}
catch (TimeoutException)
{
Logger.Log(LogType.Info, "BroadCast", "User timeout");
communicationCallback.Abort();
}
catch (Exception ex)
{
Logger.Log(LogType.Error, "BroadCast", "Exception " + ex.Message + "\n" + ex.StackTrace);
communicationCallback.Abort();
}
}
else
{
DeletionList.Add(callback);
}
}
);
}
Run Code Online (Sandbox Code Playgroud)
我担心调用回调方法,因为客户端可能会关闭他的应用程序,但我使用try catch处理它,减少超时,并且并行发送广播,那就足够了吗?
使用.NET,如何在任何端口上监听发送到.255的udp广播数据包,而无需绑定到特定端口?
是否可以从另一个应用程序中检测触摸事件,特别是滑动?我希望能够检测到用户是向左还是向右滑动(即使有两根手指 - 但不是必需的).也许我可以听一个服务或广播.
或者失败了,是否有一些API可能我可以轮询说每秒10次以获得触摸状态我可以计算其余的(为什么,我记得编写一个鼠标驱动程序选通COMO端口与IN OUTs在8086汇编编码器中XT上的TSR ......)!
无论如何,任何帮助表示赞赏.(我认为可以通过劫持主要启动器并进行透明的点击活动来完成,但这是严重的欺诈危险!)
我编写了一个简单的测试类,用于监听Eth并接收所有UDP数据包,这些数据包将转到端口5001:
public class Main {
public static void main(String[] args) throws SocketException, UnknownHostException, IOException {
DatagramSocket socket = new DatagramSocket(5001, InetAddress.getByName("255.255.255.255"));
socket.setBroadcast(true);
System.out.println("Listen on " + socket.getLocalAddress() + " from " + socket.getInetAddress() + " port " + socket.getBroadcast());
byte[] buf = new byte[512];
DatagramPacket packet = new DatagramPacket(buf, buf.length);
while (true) {
System.out.println("Waiting for data");
socket.receive(packet);
System.out.println("Data received");
}
}
}
Run Code Online (Sandbox Code Playgroud)
它不起作用了.它打印出来Waiting for data,永远不会继续.tcpdump告诉我,UDP广播包来了.我究竟做错了什么?非常感谢你.
我是ZeroMQ的新手,(并且通常使用套接字进行编程),但我尝试在ZeroMQ中实现(在Java中)对等模型.我想要的是当节点上线时,它向整个网络广播"我在这里,你可以通过这个地址联系我:......"消息.
我想如果网络上出现2个或更多节点,他们就能够找到对方而无需通过已知端点.
有没有人对如何实现这一点有任何想法?ZeroMQ甚至可以实现这一点吗?
我们在最新的Android Android 4.2.2上遇到呼叫广播的问题.
我们正在开发应用程序,它应该静音一些联系人.它在旧系统上运行良好,但在OS 4.2.2上,设备响铃约1-2秒,直到我们能够将其静音.
仅当设备处于睡眠模式(屏幕关闭)时才会发生这种情况.这个系统的广播是否以某种方式延迟?有没有人遇到类似的问题呢?谢谢你的回复.
编辑:经过一些实验(在Nexus 4上),我们发现了这一点:当我们关闭Wi-Fi时,问题就会消失,因此当从睡眠中再次开启时,Wi-Fi可能会使用太多的CPU时间(这是唯一的假设).而其他人认为我们发现:它发生了4次尝试中的3次.
我正在使用芹菜,并希望向几个工人发送广播任务.我试着这样做就像在http://docs.celeryproject.org/en/latest/userguide/routing.html#broadcast上描述的那样,所以我用任务创建简单的应用程序:
@celery.task
def do_something(value):
print value
Run Code Online (Sandbox Code Playgroud)
在应用程序中我做了:
from kombu.common import Broadcast
CELERY_QUEUES = (Broadcast('broadcast_tasks'), )
CELERY_ROUTES = {'my_app.do_something': {'queue': 'broadcast_tasks'}}
Run Code Online (Sandbox Code Playgroud)
然后我试图向工人发送任务:
my_app.do_something.apply_async(['222'], queue='broadcast_tasks')
Run Code Online (Sandbox Code Playgroud)
要么:
my_app.do_something.apply_async(['222'])
Run Code Online (Sandbox Code Playgroud)
但不幸的是,第一种方式任务是"一般"只在一次发送给一个工人 - 所以如果我有两个工人,那么任务就完成一次或第一次和第二次工作.第二种方式我不知道在哪里完成这项任务,因为在任何工人身上都没有结果.也许你的某个人会知道为什么它不像广播一样工作,我在这里做错了什么.在此先感谢您的帮助.
我用scapy构建了一个脚本,以在monitornig wi-fi界面中捕获探测请求。我成功捕获了请求以及其中包含的一些SSID。但是手机中存储的大多数网络都不会广播。对于这种情况的发生,目前还没有明确的模式。有些电话根本不播放ssid。
我正在尝试解释此行为背后的原因,但没有找到任何解释,除了应该广播隐藏网络以使电话能够连接到它们之外,但事实并非如此,并且大多数广播的是可见的。
iPhone的另一种行为是,iPhone似乎只能广播与其连接的网络,而没有其他任何广播。(无网络->没有SSID)。
我尝试过将接口放在各种渠道中,结果在广播的网络上会有所不同,但是设备中保存的绝大多数接口仍不会广播。
这背后有原因吗?还是一种强制设备将其全部广播的方法?
我只是从socket.io开始,我想要一些功能,该功能将从一个客户端通过服务器向所有客户端广播某种想法。
例如,当我需要处理很多事情时,我会玩游戏。
有两个选项:1.服务器和客户端的每个调用句柄,为每个调用创建socket.on('call');
但是我认为有更好的解决方案2。当我获得有效负载和套接字名称时,将在客户端调用中发出,它将从服务器调用到其他客户端。
像这样:SERVER
// Broadcast specific emit to all clisnts expect sender
socket.on('broadcast', function(data){
socket.broadcast.emit(data.emitName, {id: socket.id, payload: data.payload});
});
Run Code Online (Sandbox Code Playgroud)
和客户:
// Call to server
socket.emit('broadcast', {emitName: 'playerMove', payload: {....}});
// Handle called from server
socket.on('playerMove', function(data){
....
});
Run Code Online (Sandbox Code Playgroud)
第二种解决方案可以节省很多时间,但这是安全的解决方案吗?还有更好的解决方案,如何从客户端广播通过服务器进行呼叫并打给其他客户端?