我想编写一个在日历提醒发生时触发的应用程序.我意识到没有正式记录这样做的方法,但我在日志中看到当我的日历闹钟在我的手机(Droid X)上消失时,AlertReceiver表示它已收到android.intent.action.EVENT_REMINDER:
01-03 11:03:00.029 D 1523 AlertReceiver onReceive: a=android.intent.action.EVENT_REMINDER Intent { act=android.intent.action.EVENT_REMINDER dat=content://com.android.calendar/129407058000 flg=0x4 cmp=com.android.calendar/.AlertReceiver (has extras) }
Run Code Online (Sandbox Code Playgroud)
所以,我设置了一个简单的BroadcastReceiver:
package com.eshayne.android;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class CalendarTest extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
android.util.Log.i("CalendarTest", "CalendarTest.onReceive called!");
}
}
Run Code Online (Sandbox Code Playgroud)
有了这个清单:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.eshayne.android"
android:versionCode="1"
android:versionName="1.0">
<uses-permission android:name="android.permission.READ_CALENDAR" />
<application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true">
<receiver android:name="com.eshayne.android.CalendarTest">
<intent-filter>
<action android:name="android.intent.action.EVENT_REMINDER" />
</intent-filter>
</receiver>
</application>
<uses-sdk android:minSdkVersion="8" />
</manifest>
Run Code Online (Sandbox Code Playgroud)
不幸的是,当我把它放在手机上并设置一个带有提醒的日历活动时 - 当提醒提醒时,我仍然会看到AlertReceiver日志条目,但不是我的.
我还在这里阅读了一些需要通过代码而不是清单注册的系统意图.所以,我尝试了以下代码:
package …Run Code Online (Sandbox Code Playgroud) 我正在尝试实现一个简单的库,如果应用程序在NAT环境中运行,它可以通过UPnP协议发现路由器.我尝试了两种方式,多播和数据报,用于将发现数据包发送到路由器,并尝试侦听端口1901以获取路由器的响应.但是,我的代码有些问题.我尝试了以下三种方式,只有第三种方式可以正确地从路由器接收响应.我不知道为什么它在第一和第二种方式上都不起作用.
第一个:发送多播数据包,并听取端口1901的响应.
代码:
public void discovery () throws IOException {
// SSDP port
final int SSDP_PORT = 1900;
final int SSDP_SEARCH_PORT = 1901;
// Broadcast address for finding routers.
final String SSDP_IP = "239.255.255.250";
// Time out of the connection.
int TIMEOUT = 5000;
// Localhost address.
InetAddress localhost = InetAddress.getLocalHost();
// Send from localhost:1901
InetSocketAddress srcAddress = new InetSocketAddress(localhost, SSDP_SEARCH_PORT);
// Send to 239.255.255.250:1900
InetSocketAddress dstAddress = new InetSocketAddress(InetAddress.getByName(SSDP_IP), SSDP_PORT);
// ----------------------------------------- //
// Construct the request packet. …Run Code Online (Sandbox Code Playgroud) 我的服务器上有一个IOS应用程序和JAVA.我需要在同一时间只向一台设备发送一条消息.是否可以通过APNS(是否有任何apns提供的服务,我没有找到).我不可能为每个令牌循环,因为每次推送都需要时间,因为推送必须与所有设备令牌同时进行.
经过仔细的研究,测试和摆弄,我只能通过从IP /端口转发来找到将Docker容器连接到给定接口.这可以通过添加完成-p Host-IP:Host-Port:Container-Port到一个docker run命令.
我有一个应用程序,侦听UDP广播(255.255.255.255),并且无法配置转发,以便我的容器将接收这些广播而不转发我关心的端口上的所有网络流量(无论通过哪个接口它来了),即:-p Host-Port:Container-Port.
可以配置容器--net=host并只编写我的代码以绑定到给定的接口,我已经完成并测试了,但这仍然违背容器的主要思想.目标是让同一个应用程序的多个容器侦听不同的网络接口(如设备,而不是地址).
有关如何做到这一点的任何想法?
编辑#1:在考虑了这个之后,有可能在所需的接口上建立桥接就足够了,但我不相信操作系统通过它发送广播数据包.随着我进行更多测试,请继续关注.
编辑#2:数据包通过网桥发送就好了.但是,桥接器配置为Docker默认桥接器.我无法弄清楚如何在不同的桥上运行容器.看到一些注意事项,指向--net=none通过lxc容器设置将网络设置为自己并自行配置.
我通过广播共享的变量在集群中为空.
我的应用程序非常复杂,但我编写了这个小例子,当我在本地运行它时,它运行完美,但它在集群中失败了:
package com.gonzalopezzi.bigdata.bicing
import org.apache.spark.broadcast.Broadcast
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkContext, SparkConf}
object PruebaBroadcast2 extends App {
val conf = new SparkConf().setAppName("PruebaBroadcast2")
val sc = new SparkContext(conf)
val arr : Array[Int] = (6 to 9).toArray
val broadcasted = sc.broadcast(arr)
val rdd : RDD[Int] = sc.parallelize((1 to 4).toSeq, 2) // a small integer array [1, 2, 3, 4] is paralellized in two machines
rdd.flatMap((a : Int) => List((a, broadcasted.value(0)))).reduceByKey(_+_).collect().foreach(println) // NullPointerException in the flatmap. broadcasted is null
}
Run Code Online (Sandbox Code Playgroud)
我不知道问题是编码错误还是配置问题.
这是我得到的堆栈跟踪:
15/07/07 20:55:13 …Run Code Online (Sandbox Code Playgroud)
我尝试从存储在HDFS中的静态文本文件中读取数据,将其内容存储到ArrayBuffer中,而ArrayBuffer又应通过sparkContext.broadcast作为BroadcastVariable进行广播.我正在使用cloudera的spark,spark版本1.6.0-cdh5.7.0和spark-streaming_2.10.
我使用spark-submit启动纱线上的应用程序:
spark-submit --class my.package.BroadcastStreamTest1 --master yarn --deploy-mode client --conf spark.executor.userClassPathFirst=true current.jar
当我这样做时,我得到一个 java.lang.ClassCastException:无法将scala.Some的实例分配给org.apache.spark.Accumulator实例中的scala.Option类型的字段org.apache.spark.Accumulable.name 相同的代码与硬编码ArrayBuffer一起使用工作完美,所以我认为它与静态文件资源有关...有谁知道我可能做错了什么?任何帮助赞赏.
object BroadcastStreamTest1 {
def main(args: Array[String]) {
val sparkConf = new SparkConf()
val streamingContext = new StreamingContext(sparkConf, batchDuration = Seconds(10))
val content = streamingContext.sparkContext
.textFile("hdfs:///data/someTextFile.txt")
.collect()
.toBuffer[String]
val broadCastVar = streamingContext.sparkContext.broadcast(content)
broadCastVar.value.foreach(line => println(line))
streamingContext.start()
streamingContext.awaitTermination()
}
}
object BroadcastStreamTest2 {
def main(args: Array[String]) {
val sparkConf = new SparkConf()
val streamingContext = new StreamingContext(sparkConf, batchDuration = Seconds(10))
val content = … j=np.arange(20,dtype=np.int)
site=np.ones((20,200),dtype=np.int)
sumkma=np.ones((100,20))
[sumkma[site[x],x] for x in range(20)]
Run Code Online (Sandbox Code Playgroud)
这有效,但我不想使用for循环.当我尝试
sumkma[site[j],j]
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
IndexError:形状不匹配:索引数组不能与形状一起广播(20,200)(20,)
如何修复错误?
所以我们在产品中有这种不寻常的需求.我们在本地主机上运行了许多进程,需要构建它们之间的通信方式.困难在于......
一些更重要的细节......
我们需要发送的"消息"本质上是微不足道的.消息类型的名称和单个字符串参数就足够了.
通信不一定是安全的,不需要提供任何认证或访问控制手段; 但是,我们希望通过Windows登录会话对通信进行分组.这里可能感兴趣的是,非升级过程应该能够与升高的过程相互作用,反之亦然.
我的第一个问题是:是否存在一个现有的开源库?或者可以用来轻松实现这一目标的东西.截至目前我还没有找到任何东西:(
如果这个库不存在那么......你会用什么技术来解决这个问题?套接字,命名管道,内存映射文件,事件句柄?似乎基于连接的传输(套接字/管道)在完全连接的图形中是个坏主意,因为n个节点需要n(n-1)个连接.使用事件句柄和某种形式的共享存储似乎是目前最合理的解决方案......
更新
它必须可靠且有保证吗?是的,没有......让我们说如果我正在倾听,而且我在合理的时间内做出回应,那么我应该总是得到这个消息.
什么是典型的邮件大小?少于100个字节,包括消息标识符和参数.这些都很小.
我们在谈论什么消息率?低吞吐量是可以接受的,每秒10个会很多,平均使用率大约是每分钟1个.
涉及的流程数量是多少?我希望它处理0到50之间,平均值在5到10之间.
当设置套接字dgram.createSocket('udp4');并且不将其绑定到特定端口时,我会接收发送到255.255.255.255的广播数据包但是当我将相同的套接字绑定到我的接口的特定IP时,我this.server.bind(67, host);将不会收到这些广播的数据包.这是正常行为吗?
我正在为Android和iOS开发社交应用程序,iOS和Server工作已经开始.
我们的应用需要使用我们的应用向最终用户广播实时音频/视频.我们尝试过使用RED5和WOWZA设置服务器.
在iOS中我们遇到了来自RED5 iOS SDK的广播公司的崩溃,错误的框架所以我们搬到了WOWZA的试用版
在实施了适用于iOS的WOWZA GoCoder SDK之后,我们发现它的许可证对我来说太贵了8000美元+ 2000美元/年维护:(
午夜编码器似乎从评论中出错(我还没有将它用于广播客户端)
任何人都可以推荐我使用好的iOS SDK或一些自定义方式来实现我的移动相机的直播流媒体.
任何帮助将受到高度赞赏.谢谢