Android C2DM 和 lib 项目

标签 android filter push-notification manifest

我目前正在开发一个应该包含在其他一些应用程序中的 libproject (Android)。

现在一切正常,我一直在努力处理 Activity 和 list ,但 C2DM 位除外。

我可以很好地调用我的不同类,但我似乎无法捕捉到注册 ID(或者当然是实际消息,但这一定是同一个问题......)

我认为问题出在我的 list 中的过滤,所以如果有人对我有任何建议,那将非常有帮助。

这是我的 list 的接收器部分的副本(来自应用程序,而不是库,但它实际上只是一个副本),但它非常简单。我只是想知道我应该如何调整它以便在库中调用正确的类...

        <!--
             Only C2DM servers can send messages for the app. If permission is 
            not set - any other app can generate it
        -->
        <receiver
            android:name="com.google.android.c2dm.C2DMBroadcastReceiver"
            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.myapp.lib" />
            </intent-filter>
            <!-- Receive the registration id -->
            <intent-filter>
                <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
                <category android:name="com.myapp.lib" />
            </intent-filter>
        </receiver>

其中 com.myapp.lib 是我的 lib 包名称,接收方位于同名的包中(当然在 lib 项目中)。

在此先感谢您的帮助,请随时询问更多详情:)

编辑: 我只尝试使用在 google C2DM 上注册的 lib,也尝试使用 app 和 lib。同样的问题

最佳答案

通过使用 intent-filter,有一种从库项目中使用 C2DM 的更好方法。

list 文件来自应用程序。 lib 的包是 com.mylib,应用程序的包是 com.myapp。

lib list 有两处需要更改。

  1. 权限中使用的类路径。
  2. intent-filter 包。

两者都应该是您的应用程序包而不是您的库包。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.myapp"
android:versionCode="1"
android:versionName="1.0" >

<permission android:name="com.myapp.permission.C2D_MESSAGE" android:protectionLevel="signature" />

<uses-permission android:name="com.myapp.permission.C2D_MESSAGE" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />

<application
    android:icon="@drawable/icon"
    android:label="@string/app_name" >

     <uses-library android:name="com.google.android.maps" android:required="true"/>



    <activity
        android:name=".MyActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>


     <receiver
        android:name="com.mylib.C2DMRegistrationReceiver"
        android:permission="com.google.android.c2dm.permission.SEND" >
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.REGISTRATION" >
            </action>
            <category android:name="com.myapp" /> 
        </intent-filter>
    </receiver>

    <receiver
        android:name="com.mylib.C2DMMessageReceiver"
        android:permission="com.google.android.c2dm.permission.SEND" >
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" >
            </action>
           <category android:name="com.myapp" /> 
        </intent-filter>
    </receiver>
</application>
</manifest>

关于Android C2DM 和 lib 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9375719/

相关文章:

node.js - 将用户从 OneSignal 迁移到我们自己的数据库,我们从中推送通知

android - 在选项卡更改时刷新 fragment View

android - 如何显示来自推送通知 fcm 的警报

android - 带过滤器的自定义 ArrayAdapter 未正确过滤

CSS3 过滤器在 Edge 中不起作用

javascript - 如何使用数组和 JQuery 创建可过滤菜单?

Android ImageView 没有使用 Thread.sleep 渲染

android - Delphi RAD STUDIO Android 应用程序与 Kitkat 4.4.2 上的状态栏重叠

javascript - 无法堆叠多个推送通知

ios - 在 iOS 中使用 PushPlugin for Cordova 清除单个通知