4

com.example.myapp安装了一个收到C2DM Intents 的应用程序 ( )。我想借助它来执行我自己的处理,以Intent在单独的应用程序 ( com.example.myapp2) 中响应这些 s。根据this answerC2DM客户端系统寻找:

Intent 的广播接收器: com.google.android.c2dm.intent.REGISTRATION

有权限的: .permission.C2D_MESSAGE

在原始应用程序中,定义和使用了以下权限,如 C2DM 文档中所述

  <!-- Only this application can receive the messages and registration result --> 
   <permission android:name="com.example.myapp.permission.C2D_MESSAGE" android:protectionLevel="signature" />
   <uses-permission android:name="com.example.myapp.permission.C2D_MESSAGE" />

这是com.example.myapp2的清单,我在其中也使用了该权限:

<manifest package="com.example.myapp2" ...>

   <!-- Only this application can receive the messages and registration result --> 
   <uses-permission android:name="com.example.myapp.permission.C2D_MESSAGE" />

   <!-- This app has permission to register and receive message -->
   <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />

   <!-- Send the registration id to the server -->
   <uses-permission android:name="android.permission.INTERNET" />

   <application...>
      <!-- Only C2DM servers can send messages for the app. If permission is not set - any other app can generate it --> 
      <receiver android:name=".C2DMReceiver" android:permission="com.google.android.c2dm.permission.SEND">
          <!-- Receive the actual message -->
          <intent-filter>
              <action android:name="com.google.android.c2dm.intent.RECEIVE" />
              <category android:name="com.example.myapp" />
              <category android:name="com.example.myapp2" />
          </intent-filter>
      </receiver>
      ...
   </application>
   ...
</manifest>

C2DMReceiver的是com.example.myapp2.C2DMReceiver。请注意,我没有在听com.google.android.c2dm.intent.REGISTRATION Intents,因为我不关心注册。我只关心接收已经接收的Intents 。com.example.myapp在我IntentFilter的 for com.google.android.c2dm.intent.RECEIVE Intents 中,我过滤了两者com.example.myappcom.example.myapp2 categorys,因为C2DM并没有具体说明 a 的C2DM Intent外观。任何帮助将不胜感激。

我已经验证com.example.myapp2com.example.myapp.permission.C2D_MESSAGE权限。如果我使用调试密钥运行,我没有它,但如果我使用释放密钥运行,我有它。显然,我正在使用发布密钥在我的设备上运行该版本。

com.example.myapp收到一个C2DM Intent com.example.myapp2不收到它。关于如何调试或如何使其工作的任何想法?甚至可能吗?

4

1 回答 1

0

AFAIK 这是不可能的。当应用程序注册 C2DM 消息时,它会生成一个基于应用程序包名称的密钥,并且每个设备只能拥有一个密钥。

如果您使用相同的签名,那么我假设您控制这两个应用程序,如果是这样,您必须让接收 C2DM 消息的应用程序通过他们都可以访问的服务将数据传输到第二个应用程序。

于 2013-03-16T08:06:01.597 回答