Bar*_*urg 7 android push-notification google-cloud-messaging
我有一个应用程序,我想在其中构建2个不同的流程:
1.b App show是一个警告框,用户可以选择转到有关通知的活动或保持当前活动.
2.a应用程序在后台运行
我目前有流量2工作,但无法找到如何让流量1工作.这是一些代码:
在GcmIntentService中:
@Override
protected void onHandleIntent(Intent intent) {
Bundle extras = intent.getExtras();
GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(this);
// The getMessageType() intent parameter must be the intent you received
// in your BroadcastReceiver.
String messageType = gcm.getMessageType(intent);
if (!extras.isEmpty()) { // has effect of unparcelling Bundle
/*
* Filter messages based on message type. Since it is likely that GCM will be
* extended in the future with new message types, just ignore any message types you're
* not interested in, or that you don't recognize.
*/
if (GoogleCloudMessaging.MESSAGE_TYPE_SEND_ERROR.equals(messageType)) {
Log.e("GCM", "Send error: " + extras.toString());
} else if (GoogleCloudMessaging.MESSAGE_TYPE_DELETED.equals(messageType)) {
Log.e("GCM", "Deleted messages on server: " + extras.toString());
// If it's a regular GCM message, do some work.
} else if (GoogleCloudMessaging.MESSAGE_TYPE_MESSAGE.equals(messageType)) {
Log.i(TAG, "Completed work @ " + SystemClock.elapsedRealtime());
// Post notification of received message.
sendNotification(extras);
Log.i(TAG, "Received: " + extras.toString());
}
}
// Release the wake lock provided by the WakefulBroadcastReceiver.
GcmBroadcastReceiver.completeWakefulIntent(intent);
}
// Put the message into a notification and post it.
// This is just one simple example of what you might choose to do with
// a GCM message.
private void sendNotification(Bundle extras) {
mNotificationManager = (NotificationManager)
this.getSystemService(Context.NOTIFICATION_SERVICE);
String message = extras.getString("message");
Intent openIntent = new Intent(this, HomeActivity.class);
if (extras != null) {
if (extras.containsKey("tipid")) {
openIntent.putExtra("tipid", extras.getString("tipid"));
} else if (extras.containsKey("discussionid")) {
openIntent.putExtra("discussionid", extras.getString("discussionid"));
}
}
PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
openIntent, PendingIntent.FLAG_CANCEL_CURRENT);
NotificationCompat.Builder mBuilder =
new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.ic_launcher)
.setContentTitle("StadseBoeren")
.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
.setStyle(new NotificationCompat.BigTextStyle()
.bigText(message))
.setContentText(message);
mBuilder.setContentIntent(contentIntent)
.setAutoCancel(true);
mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());
}
Run Code Online (Sandbox Code Playgroud)
GcmBroadcastReceiver
public class GcmBroadcastReceiver extends WakefulBroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// Explicitly specify that GcmIntentService will handle the intent.
ComponentName comp = new ComponentName(context.getPackageName(),
GcmIntentService.class.getName());
// Start the service, keeping the device awake while it is launching.
startWakefulService(context, (intent.setComponent(comp)));
setResultCode(Activity.RESULT_OK);
}
}
Run Code Online (Sandbox Code Playgroud)
HomeActivity onCreate:
Bundle extras = intent.getExtras();
if (extras != null) {
if (extras.containsKey("tipid")) {
pendingObjectId = extras.getString("tipid");
modelFlag = ModelFlag.TIP;
} else if (extras.containsKey("discussionid")) {
pendingObjectId = extras.getString("discussionid");
modelFlag = ModelFlag.DISCUSSION;
}
}
Run Code Online (Sandbox Code Playgroud)
使类扩展Application并实现ActivityLifecycleCallbacks并根据暂停和onResume更新公共布尔值.
在收到push时检查此布尔值并执行您的要求.
希望对你有帮助
public class TestApplication extends Application implements ActivityLifecycleCallbacks{
boolean applicationOnPause = false;
@Override
public void onCreate() {
super.onCreate();
registerActivityLifecycleCallbacks(this);
}
@Override
public void onActivityCreated(Activity arg0, Bundle arg1) {
Log.e("","onActivityCreated");
}
@Override
public void onActivityDestroyed(Activity activity) {
Log.e("","onActivityDestroyed ");
}
@Override
public void onActivityPaused(Activity activity) {
applicationOnPause = true;
Log.e("","onActivityPaused "+activity.getClass());
}
@Override
public void onActivityResumed(Activity activity) {
applicationOnPause = false;
Log.e("","onActivityResumed "+activity.getClass());
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
Log.e("","onActivitySaveInstanceState");
}
@Override
public void onActivityStarted(Activity activity) {
Log.e("","onActivityStarted");
}
@Override
public void onActivityStopped(Activity activity) {
Log.e("","onActivityStopped");
}
Run Code Online (Sandbox Code Playgroud)
}
小智 5
我只想写另一个BroadcastReceiver
这样的:
public class MainActivityBroadcastReceiver extends BroadcastReceiver {
public MainActivityBroadcastReceiver(Activity mainActivity) {
}
@Override
public void onReceive(Context context, Intent intent) {
Toast toast = Toast.makeText(context, "hola", Toast.LENGTH_LONG);
toast.show();
abortBroadcast();
}
}
Run Code Online (Sandbox Code Playgroud)
然后在MainActivity
我重写方法,然后我没有收到通知,所以我拦截`意图〜并中止其他广播:
@Override
protected void onPause() {
unregisterReceiver(mainActivityBroadcastReceiver);
super.onPause();
}
@Override
public void onResume() {
IntentFilter filter = new IntentFilter("com.google.android.c2dm.intent.RECEIVE");
filter.setPriority(1);
registerReceiver(mainActivityBroadcastReceiver, filter);
super.onResume();
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8307 次 |
最近记录: |