如何把对/对GCM推送通知的设置功能关闭内部应用程序在android系统?(how to put t

2019-10-20 20:55发布

我整合GCM的通知,这是工作的罚款。 现在我加入的开/关 notification.I停止/启动服务,但没有成功切换按钮。 请建议如何管理服务和接收器? 我的代码如下。

public class GCMIntentService extends GCMBaseIntentService {

private static final String TAG = "GCMIntentService";

public GCMIntentService() {
    super("123456789123");
}

/**
 * Method called on device registered
 **/
@Override
protected void onRegistered(Context context, String registrationId) {
    Log.i(TAG, "Device registered: regId = " + registrationId); 
    ZunaCard.displayMessage(context,
            "Your device registred with GCM");
    ZunaCard.saveDeviceId(registrationId);
}

/**
 * Method called on device unRegistred
 * */
@Override
protected void onUnregistered(Context context, String registrationId) {
    Log.i(TAG, "Device unregistered");
    ZunaCard.displayMessage(context,
            "From GCM: device successfully unregistered!");
}

/**
 * Method called on Receiving a new message
 * */
@Override
protected void onMessage(Context context, Intent intent) {
    Log.i(TAG, "Received message");
     String msgNotif = intent.getExtras().getString("message");
      if (!TextUtils.isEmpty(msgNotif)) {
         System.out.println("Called onMessage>>>>>>>>>>>>>>>>>"+msgNotif);
         generateNotification(context, ""+msgNotif);    
    }



}

/**
 * Method called on receiving a deleted message
 * */
@Override
protected void onDeletedMessages(Context context, int total) {
    Log.i(TAG, "Received deleted messages notification");
    String message = "From GCM: server deleted %1$d pending messages!";
    ZunaCard.displayMessage(context, message);
    // notifies user
    generateNotification(context, message);
}

/**
 * Method called on Error
 * */
@Override
public void onError(Context context, String errorId) {
    Log.i(TAG, "Received error: " + errorId);
    ZunaCard.displayMessage(context, "From GCM: error (%1$s). "
            + errorId);
}

@Override
protected boolean onRecoverableError(Context context, String errorId) {
    // log message
    Log.i(TAG, "Received recoverable error: " + errorId);
    ZunaCard.displayMessage(context,
            "From GCM: recoverable error (%1$s). " + errorId);
    return super.onRecoverableError(context, errorId);
}

/**
 * Issues a notification to inform the user that server has sent a message.
 */
private static void generateNotification(Context context, String message) {

    System.out.println("Called generateNotification>>>>>>>>>>>>>"+message);
    NotificationManager notificationManager = (NotificationManager) context
            .getSystemService(Context.NOTIFICATION_SERVICE);
    // Notification notification = new Notification(icon, message, when);

    String title = context.getString(R.string.app_name);

    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
            context)
            .setSmallIcon(R.drawable.app_icon)
            .setContentTitle(title)

            .setStyle(
                    new NotificationCompat.BigTextStyle().bigText(message))
            .setContentText(message);

    Intent notificationIntent = new Intent(context,
            SplashActivity.class);
    PendingIntent intent = PendingIntent.getActivity(context, 0,
            notificationIntent, PendingIntent.FLAG_CANCEL_CURRENT);

    mBuilder.setContentIntent(intent);

    Notification notification = mBuilder.build();
    notification.flags |= Notification.FLAG_AUTO_CANCEL;

    notification.defaults |= Notification.DEFAULT_SOUND;
    notification.defaults |= Notification.DEFAULT_VIBRATE;  
    notificationManager.notify(0, notification);

}}

和接收器的代码:

public class GCMReceiver extends GCMBroadcastReceiver {
@Override
protected String getGCMIntentServiceClassName(Context context) {
    return context.getString(R.string.gcm_service_class);
}}

Answer 1:

我会用这个来注销GCM服务和接收器:

public static void unregisterGCMComponents(Context context)
{
    int flag = PackageManager.COMPONENT_ENABLED_STATE_DISABLED;

    ComponentName component1 = new ComponentName(context, GCMIntentService.class);
    context.getPackageManager().setComponentEnabledSetting(component1, flag,    PackageManager.DONT_KILL_APP);

    ComponentName component2 = new ComponentName(context, GCMBroadcastReceiver.class);
    context.getPackageManager().setComponentEnabledSetting(component2, flag, PackageManager.DONT_KILL_APP);
}

所以,你可以打电话从发射器类或这种方法“申请”级这样的:

if(!notification_flag) //push is set to ON
    unregisterGCMComponents(this);


Answer 2:

有实现双向的。


  1. 你可以从GCM未注册键。
  2. 您可以从服务器通过从应用程序关闭通知的情况下,使用服务中移除设备令牌。

跳这会给想法。



文章来源: how to put the settings functionality for GCM Push Notification on/off inside the app in android?