我正在尝试测试C2DM框架.我几天前收到了确认电子邮件,然后尝试创建一个可以注册的客户端.为此,我按照本教程中描述的步骤创建了一个简单的客户端:http://code.google.com/intl/es-419/android/c2dm/index.html.
Android清单文件包含以下代码:
<permission android:name="com.bilthon.ufrj.permission.C2D_MESSAGE" android:protectionLevel="signature" />
<uses-permission android:name="com.bilthon.ufrj.permission.C2D_MESSAGE" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.INTERNET"/>
<receiver android:name=".C2DMReceiver" android:permission="com.google.android.c2dm.permission.SEND">
<intent-filter>
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="com.bilthon.ufrj" />
</intent-filter>
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<category android:name="com.bilthon.ufrj" />
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
然后,程序启动时启动的主要活动具有以下代码:
Intent registrationIntent = new Intent("com.google.android.c2dm.intent.REGISTER");
registrationIntent.putExtra("app", PendingIntent.getBroadcast(this, 0, new Intent(), 0)); // boilerplate
registrationIntent.putExtra("sender","mytestemail@gmail.com");
Log.d("WelcomeScreen","mytestemail@gmail.com");
startService(registrationIntent);
Run Code Online (Sandbox Code Playgroud)
我还在运行我的客户端的AVD上注册了一个谷歌帐户,因为他们说这是必需的.但问题是我不能让广播接收器"醒来".我不知道会出现什么问题.通过分析日志,我可以看到注册意图已经创建并且显然正确使用,但是接收器代码从未被执行过,可能出错了什么?
在此先感谢尼尔森
我正在尝试实现Android c2dm.我查看了文档,看到了提供的跳转说明和镀铬到手机样品......
但我无法弄清楚这个过程.如果我可以简单地实现c2dm,那么当我们从服务器发送请求时,它会显示简单的通知...... Plz帮助
有没有人知道Android c2dm每天的设备配额?
PS:我对20万的应用配额并不感兴趣.
我正在尝试做的是在收到c2dm消息时,启动一个服务,询问位置"x"的时间,然后将该位置移交给我们的服务器.c2dm消息正确启动服务,GPS位置打开,但它永远不会更新.它只是坐在那里我指定的时间长度(当前为12秒)并没有做任何事情.我在我的应用程序中使用完全相同的代码(不是作为服务)并且它完美地工作.我究竟做错了什么?
这会在收到c2dm消息时启动服务.
context.startService(new Intent(context, ServicePingLocation.class));
Run Code Online (Sandbox Code Playgroud)
这是服务本身的代码.所有被称为"onCreate"和"onStart"的东西.
public class ServicePingLocation extends Service implements LocationListener {
private final String DEBUG_TAG = "[GPS Ping]";
private boolean xmlSuccessful = false;
private boolean locationTimeExpired = false;
private LocationManager lm;
private double latitude;
private double longitude;
private double accuracy;
@Override
public void onLocationChanged(Location location) {
Log.d(DEBUG_TAG, "onLocationChanged");
latitude = location.getLatitude();
longitude = location.getLongitude();
accuracy = location.getAccuracy();
}
@Override
public void onProviderDisabled(String provider) {
Log.d(DEBUG_TAG, "onProviderDisabled");
Toast.makeText(
getApplicationContext(),
"Attempted to ping your location, and GPS was disabled.", …Run Code Online (Sandbox Code Playgroud) 我在Android中使用MDM,并在从服务器收到C2DM推送消息时使用API来锁定,擦除等.
当我试图在iOS上探索更多内容时,我有点困惑.我有一种感觉,我们不需要为MDM代理代理以在iPhone上工作.
那么它是从服务器完全管理的吗?或者我是否还需要代理申请?如果是的话,你能帮我一个代理编程样本吗?
谢谢.
我正在使用C2DM,我的BroadcastReceivers将C2DM事件传播到本地服务.该服务通过将id发送到我的webserver来完成注册,它负责让设备知道新消息,但是如果应用程序(其中一个活动)已启动,我们希望用新数据向该活动发送意图,它可以更新,如果不是NotificationManager用于通知用户.
问题是,如何知道活动正在运行?Application对象不是一个选项,因为Service是应用程序的一部分,它显然会出现.在每个应用程序的onDesroy中取消注册也不是一个选项,因为它可能会在方向更改中发生...
完成任何标准方法吗?
我开始使用Google的C2DM了.此过程的一部分涉及在注册发生时接收广播意图.在Google的官方C2DM文档中,示例代码在BrodcastReceiver的onReceive()方法中显示以下注释:
// Send the registration ID to the 3rd party site that is sending the messages.
// This should be done in a separate thread.
Run Code Online (Sandbox Code Playgroud)
但是,我读过的所有内容,包括BroadcastReceiver的文档,都表明从onReceive()启动一个线程几乎肯定会引起问题,因为一旦onReceive()返回,该过程很快就会被杀死.
有人可能犯了一个错误,我应该忽略关于使用单独线程的评论,但我猜他们说这是有原因的,即使它有误导性.
有没有理由在返回之前不能或不应该使用与onReceive()相同的线程中的网络?如果这样做有问题,那么即使在C2DM之外,处理必须是常见情况的正确方法是什么?开始服务?
multithreading android broadcastreceiver android-networking android-c2dm
在我们使用GCM的其中一个应用程序上,我们一直在收到有关应用程序被杀后应用程序停止接收通知的报告.再次启动应用程序时,通知显示正常.
经过调查,我们发现这是由于Android 3.1上的这一变化:
请注意,系统将FLAG_EXCLUDE_STOPPED_PACKAGES添加到所有广播意图.这样做是为了防止来自后台服务的广播无意或不必要地启动已停止的应用程序的组件.后台服务或应用程序可以通过将FLAG_INCLUDE_STOPPED_PACKAGES标志添加到应允许激活已停止的应用程序的广播意图来覆盖此行为.(Android 3.1更改)
我检查了收到通知后GCM触发的意图,我注意到确实设置了FLAG_EXCLUDE_STOPPED_PACKAGES.
这意味着在Android 3.1+上运行我们的应用的所有用户一旦杀死他们的应用就会停止接收通知,直到他们自己重启.(Pre-Android 3.1工作得很好).
由于GCM框架本身触发了intent,我们无法更改在其上设置的标志,因此我们正在寻找另一种解决方法.
所有想法都表示赞赏.
我从谷歌播放的用户那里得到以下例外:
java.lang.SecurityException: Not allowed to start service Intent { act=com.google.android.c2dm.intent.REGISTER pkg=com.google.android.gsf (has extras) } without permission com.google.android.c2dm.permission.RECEIVE
Run Code Online (Sandbox Code Playgroud)
我已经将我的应用程序上市了8个月,这是我第一次遇到这个例外.任何人都可以告诉我,这个异常是如何突然发生的,这是关于什么的.我在网上搜索但找不到任何东西.请帮忙.
我正在开发C2DM消息应用程序.当i为了接收使用的注册ID IM C2DMBroadcastReceiver,C2DMBaseReceiver和C2DMMessaging类.我将C2DMReceiver在我的包裹中延伸C2DMBaseReceiver.
这是我的代码片段
C2DMMessaging.java
package com.google.android.c2dm;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.util.Log;
public class C2DMessaging {
public static final String EXTRA_SENDER = "sender";
public static final String EXTRA_APPLICATION_PENDING_INTENT = "app";
public static final String REQUEST_UNREGISTRATION_INTENT = "com.google.android.c2dm.intent.UNREGISTER";
public static final String REQUEST_REGISTRATION_INTENT = "com.google.android.c2dm.intent.REGISTER";
public static final String LAST_REGISTRATION_CHANGE = "last_registration_change";
public static final String BACKOFF = "backoff";
public static final String GSF_PACKAGE = …Run Code Online (Sandbox Code Playgroud)