我有GCM示例android gradle项目。它运行良好,当我添加2种口味时,推送通知停止工作。我的编译清单(取自app\build\intermediates\manifests\ex\debug
)文件如下:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.flavor.app"
<uses-permission android:name="com.flavor.app.permission.C2D_MESSAGE" />
<permission
android:name="com.flavor.app.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<receiver
android:name="com.google.android.gcm.GCMBroadcastReceiver"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="com.flavor.app" />
</intent-filter>
</receiver>
<service android:name="com.ex.app.GCMIntentService" />
<service
android:name="com.ex.app.AppLocationService"
class=".AppLocationService" >
<intent-filter>
<action
android:name=".AppLocationService"
android:value=".AppLocationService" />
</intent-filter>
</service>
我该怎么做才能解决这个问题?请帮忙。
UPD1。我正在使用gradle v.0.12 +。我认为我的最终清单文件看起来不错,GCMRegistrar.checkManifest(this); - 没有错误,但GCMRegistrar.isRegistered(this)总是假的。 =(
UPD2。我的第一个带有原始包名称的风味项目(作为主分支中的项目)运行良好,但是更改包的第二个风格不起作用(pushId for push仍为空),但是在清单文件中,所有权限都是正确的。
答案 0 :(得分:37)
Simpy使用像这样的//In the Helper class
public static void createLocationDialog(FragmentActivity fa, String name, String id,String tag, Bundle args){
LocationDialogFragment lf = new LocationDialogFragment();
Bundle bundle = new Bundle();
bundle.putString(Constants.CURRENT_NAME, name);
bundle.putLong(Constants.CURRENT_ID, id);
lf.setArguments(args);
lf.show(fa.getFragmentManager(), tag);
}
// in the fragments:
createLocationDialog(getActivity(), thename, theid, thetag, theargs)
别名
${applicationId}
对于相应的接收器使用此
<permission android:name= "${applicationId}.permission.C2D_MESSAGE"
android:protectionLevel= "signature" />
<uses-permission android:name= "${applicationId}.permission.C2D_MESSAGE" />
<uses-permission android:name= "com.google.android.c2dm.permission.RECEIVE" />
答案 1 :(得分:1)
我在这篇文章GCM not registering when changing package name with Gradle中找到了解决方案。我只是覆盖BroadcastReceiver,如果有人能解释为什么它会帮助我告诉我。