J'ai un projet en tant que bibliothèque à exporter vers la version allégée de mon projet. Dans le projet de bibliothèque, j'ai implémenté des notifications push. J'ai exécuté le projet de bibliothèque comme projet normal et la notification push fonctionne correctement. Mon problème se produit lorsque j'importe ce projet en tant que bibliothèque dans le projet version Lite. La notification push a échoué.Recevoir des notifications push dans le projet de bibliothèque
Voici ma classe GCMIntentService:
public class GCMIntentService extends GCMBaseIntentService {
public static final String SENDER_ID = "206703456431";
public GCMIntentService() {
super(SENDER_ID);
}
private static final String TAG = "===GCMIntentService===";
@Override
protected void onRegistered(Context arg0, String registrationId) {
Log.i(TAG, "Device registered: regId = " + registrationId);
Applications app = (Applications) getApplication();
app.setDeviceToken(registrationId);
}
@Override
protected void onUnregistered(Context arg0, String arg1) {
Log.i(TAG, "unregistered = " + arg1);
}
@Override
protected void onMessage(Context arg0, Intent arg1) {
Log.i(TAG, "Received message. Extras: " + arg1.getExtras());
String message = arg1.getExtras().getString("message");
displayMessage(arg0, message);
// notifies user
generateNotification(arg0, message);
}
@Override
protected void onError(Context arg0, String errorId) {
Log.i(TAG, "Received error: " + errorId);
}
@Override
protected boolean onRecoverableError(Context context, String errorId) {
return super.onRecoverableError(context, errorId);
}
/**
* Issues a notification to inform the user that server has sent a message.
*/
@SuppressWarnings("deprecation")
private static void generateNotification(Context context, String message) {
int icon = R.drawable.icon_57x57_fixed;
NotificationManager notificationManager = (NotificationManager) context
.getSystemService(Context.NOTIFICATION_SERVICE);
Notification notification = new Notification();
notification.defaults |= Notification.DEFAULT_SOUND;
notification.icon = icon;
String title = context.getString(R.string.app_name);
Intent notificationIntent = new Intent(context,
HomeScreenActivity.class);
Intent notificationIntentV2 = new Intent(context,
LoginActivity.class);
// set intent so it does not start a new activity
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
| Intent.FLAG_ACTIVITY_SINGLE_TOP);
notification.flags = Notification.FLAG_AUTO_CANCEL;
PendingIntent intent = PendingIntent.getActivity(context, 0,
notificationIntent, 0);
notification.setLatestEventInfo(context, title, message, intent);
notificationManager.notify(0, notification);
}
class ForegroundCheckTask extends AsyncTask<Context, Void, Boolean> {
@Override
protected Boolean doInBackground(Context... params) {
final Context context = params[0].getApplicationContext();
return isAppOnForeground(context);
}
private boolean isAppOnForeground(Context context) {
ActivityManager activityManager = (ActivityManager) context
.getSystemService(Context.ACTIVITY_SERVICE);
List<RunningAppProcessInfo> appProcesses = activityManager
.getRunningAppProcesses();
if (appProcesses == null) {
return false;
}
final String packageName = context.getPackageName();
for (RunningAppProcessInfo appProcess : appProcesses) {
if (appProcess.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND
&& appProcess.processName.equals(packageName)) {
return true;
}
}
return false;
}
}
Le Manifest.xml dans le projet de bibliothèque:
<uses-permission android:name="com.myapp.libraryproject.permission.C2D_MESSAGE" />
<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.myapp.libraryproject" />
</intent-filter>
</receiver>
<service android:name="com.myapp.libraryproject.GCMIntentService" />
Le Manifest.xml dans l'exportation projet Lite (utilisation projet de bibliothèque comme bibliothèque):
<uses-permission android:name="com.myapp.liteversion.permission.C2D_MESSAGE" />
<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.myapp.liteversion" />
</intent-filter>
</receiver>
<service android:name="com.myapp.libraryproject.GCMIntentService" />
Merci à vous. J'ai résolu cela. –