androidc2dm和lib项目

androidc2dm和lib项目,android,filter,push-notification,manifest,Android,Filter,Push Notification,Manifest,我目前正在开发一个libproject(Android),它应该包含在其他一些应用程序中 现在一切都很好,我一直在努力处理活动和清单,C2DM除外 我可以很好地调用不同的类,但似乎无法捕获注册ID(或者当然是实际的消息,但这一定是同一个问题…) 我认为问题来自于我清单中的过滤,所以如果有人对我有任何建议,那将非常有用 这是我清单的接收者部分的副本(来自应用程序,不是库,但实际上只是一个副本),但它非常严格。我只是想知道我应该如何调整它,以便在库中调用正确的类 <!--

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

现在一切都很好,我一直在努力处理活动和清单,C2DM除外

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

我认为问题来自于我清单中的过滤,所以如果有人对我有任何建议,那将非常有用

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

        <!--
             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项目中)

提前感谢您的帮助,请随时询问更多详细信息:)

编辑:
我只尝试了在谷歌C2DM上注册的lib,也尝试了app和lib。同样的问题

清单看起来很好。在您的包中,您应该有一个名为C2DMReceiver的类,它应该扩展C2DMBaseCeiver。该类及其包含的重写方法在成功注册和收到消息时被调用。我已经写了一个非常基本的例子,可能有助于你参考答案,是不是有人碰到了同样的问题

在google.android.c2dm包中,类c2dbasereceiver,方法runIntentInService,change

String receiver = context.getPackageName() + ".C2DMReceiver"

使用完全限定名。。接下来:)

有一种更好的方法可以通过使用intent过滤器从库项目中使用C2DM

清单文件是应用程序中的文件。 lib的包是com.mylib,而app的包是com.myapp

lib清单中有两件事需要更改

  • 权限中使用的类路径
  • 意图过滤器包
  • 两者都应该是应用程序包,而不是lib包

    <?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>
    
    
    
    谢谢您的回复。我已经这样做了,如果我把这个库作为一个应用程序使用,它就可以正常工作了。我想在使用库的项目中使用这些类,而不必在新包中复制我的C2DM。。。而且似乎找不到办法让它工作..你是否将google.android.c2dm包放在所有使用该库的应用程序中?或者你用什么来代替它?