4

を受け取ったアプリ(com.example.myapp)をインストールしましたC2DM IntentIntentこれに便乗して、別のアプリでこれらに応答して独自の処理を実行したいと思います( com.example.myapp2)。この回答によると、C2DMクライアントシステムは以下を探します。

インテントの放送受信機: 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>

C2DMReceivercom.example.myapp2.C2DMReceiverです。com.google.android.c2dm.intent.REGISTRATION Intent登録は気に​​しないので、sをリッスンしていないことに注意してください。私はすでに受信しているIntentsを受信することだけを気にします。com.example.myappIntentFilterのforsでは、aがどのように見えるかについて正確に特定されていないため、とsのcom.google.android.c2dm.intent.RECEIVE Intent両方をフィルタリングします。どんな助けでもいただければ幸いです。com.example.myappcom.example.myapp2 categoryC2DMC2DM Intent

許可com.example.myapp2があることを確認しました。com.example.myapp.permission.C2D_MESSAGEデバッグキーを使用して実行する場合は持っていませんが、リリースキーを使用して実行する場合は持っています。明らかに、リリースキーを使用してデバイスでバージョンを実行しています。

受け取ったときcom.example.myappは受け取りC2DM Intent com.example.myapp2ません。デバッグする方法やこれを機能させる方法についてのアイデアはありますか?それも可能ですか?

4

1 に答える 1

0

私の知る限り、これは不可能です。アプリが C2DM メッセージに登録すると、アプリのパッケージ名に基づいたキーが生成されます。デバイスごとに 1 つしか保持できません。

同じ署名を使用している場合は、両方のアプリを制御していると仮定します。その場合、C2DM メッセージを受信するアプリに、両方がアクセスできるサービスを介して 2 番目のアプリにデータを送信させる必要があります。

于 2013-03-16T08:06:01.597 に答える