我正在编写和Android SDK,它应该从SDK服务器端接收GCM推送消息.成功推送消息发送几个小时后,GCM服务器返回NotRegistered错误:
{
"multicast_id":6205350692941230304,
"success":0,
"failure":1,
"canonical_ids":0,
"results":
[
{
"error":"NotRegistered"
}
]
}
Run Code Online (Sandbox Code Playgroud)
将registrationId在客户端并没有改变,而在服务器端与该令牌更新.
我该如何解决这个registrationId问题?有两个听众 - 一个在SDK中,一个在应用程序中 - 一个问题?
我的Android SDK regId在初始化时注册GCM ,并将该id发送到支持SDK的服务器.
拥抱应用程序可能(通常会)注册regId自己的GCM .另一个regId可能被发送到拥抱应用程序的服务器.
该senderIdSDK和应用程序的不同.
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> ...
<receiver
android:name="com.xxxx.xxxxx.xxxxx"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
protected String doInBackground(Void... params) {
String msg = "";
try {
if (gcm == null) {
gcm = GoogleCloudMessaging.getInstance(mContext);
}
regid …Run Code Online (Sandbox Code Playgroud) 我需要通过第三方应用程序(如Youtube,Gmail等)共享视频网址(不是YouTube).我的服务器上有.mp4或.m3u8文件的链接,我在VideoView上成功显示,但我也有我希望通过ACTION_SEND分享同一活动的分享按钮.
我测试过:
Intent share = new Intent(Intent.ACTION_SEND);
share.setType("text/plain");
share.putExtra(Intent.EXTRA_STREAM, Uri.parse(mVideoUrl));
startActivity(Intent.createChooser(share, "Share Video"));
Run Code Online (Sandbox Code Playgroud)
它确实启动了共享选择器,但我不能在Youtube上分享这个,因为他们期望收到视频类型而不是链接.共享链接也是一个糟糕的选择,因为它并不认为它是一个视频.
如果我用这个:
Intent share = new Intent(Intent.ACTION_SEND);
share.setType("video/*");
share.putExtra(Intent.EXTRA_STREAM, Uri.parse(filePath));
startActivity(Intent.createChooser(share, "Share Video"));
Run Code Online (Sandbox Code Playgroud)
虽然filePath是存储在外部存储中的视频文件的绝对路径,但它确实在YouTube,Gmail,Facebook等上共享真实的视频文件.
但我的问题是我的视频文件大小可能超过300MB,因此将文件下载到设备然后共享可能会耗费内存,当然下载文件需要花费一些时间.
那么有没有办法分享链接,让第三方应用程序视为视频并将其嵌入到他们的应用程序中,或者我唯一的选择是下载视频,保存在存储中然后共享(这是更糟糕的选择)或者分享它作为文本链接?
还有其他我不熟悉的选项是通过YouTube,Gmail等分享流媒体视频而无需将真实文件下载到设备吗?
我正在开发一个Android视频应用,我需要在暂停模式下获取正在显示的视频的当前帧编号.
我需要向我的服务器发送当前在视频中暂停的帧编号并获取有关该帧/时间的项目列表,现在我发送当前暂停时间(以毫秒为单位),但它不能很好地工作,因为服务器根据时间比较发送到其计算的特定帧的时间,但有时比较不准确.
我知道如果你使用MediaMetaDataRetriever,你可以从该帧获得一个位图,我做了它,但它返回位图图像,我需要的是一个索引.我正在使用ExoPlayer(我需要MP4和HLS的功能,如果这很重要).
有没有办法从视频中获取该信息?
Exoplayer是否支持视频(MP4和HLS)中的播放速度变化?
如果没有,有没有人建议如何实现这种功能?
我们有一个 Android 和 iOS 应用程序,我们使用电子邮件/密码、Facebook 和 Google 帐户实施了 Firebase 身份验证。
我们如何知道 Firebase 是否能够阻止黑客多次运行带有随机电子邮件和密码的脚本以最终侵入我们的系统?
我们在 Firebase 控制台上发现了这一点 -
管理注册配额
为了保护您的项目免遭滥用,我们限制您的应用程序可以从同一 IP 地址进行的新电子邮件/密码和匿名注册的数量。您可以在此处请求并安排对此配额的临时更改。
当前每小时配额:100
但无法在网络上找到任何其他内容,而且这对于 SIGN_IN 方法来说也不是那么清楚,而不仅仅是上面写的 SIGN_UP 。
任何帮助表示赞赏。
在我们的应用程序中,我们使用多个服务和意图服务来进行 BLE 通信、麦克风录音等。
我们注意到了新的背景限制和限制(是的,我知道我们确实很晚才注意到)。我已经更改了使用 ContextCompat.startForegroundService() 函数的实现,并将 startForeground() 与文档中所述的通知一起使用。
但我们看到,当应用程序被终止时,前台服务也会在几分钟后终止。它应该发生吗?仅当应用程序在后台时,前台服务才应继续工作吗?
另外,如果是这种情况,电池优化功能有何作用?使服务仅在后台运行?当应用程序处于后台并且启用此功能时,服务是否仍然可以被杀死?
我已经阅读了很多有关它的文档,但我仍然对应用程序被终止时的服务状态感到困惑。
我们不介意显示这些服务的通知,但我们仍然希望它继续“无休止”地工作。
android background-process foreground-service android-8.0-oreo