The constructor notification is deprecated

前端 未结 3 2053
野性不改
野性不改 2020-12-16 11:39

I am very new to android app development. With the help of so many tutorials, i created an app with webview, actionbar and GCM. Everything works fine. But i am getting a war

相关标签:
3条回答
  • 2020-12-16 11:48

    I tried following tutorial at: http://javapapers.com/android/google-cloud-messaging-gcm-for-android-and-push-notifications/ and in fact I seem able to register and the sending of notifications gives no errors as you may see at: http://push.taxiprofessional.net/android/testNotification.php

    Yet no notification arrives. Has anyone used that and may help to debunk it?

    0 讨论(0)
  • 2020-12-16 11:56

    You're attempting to use the constructor for Notification which is deprecated as of API 11. Meaning it isn't supported any longer and should not be used. use Notification.Builder instead https://developer.android.com/reference/android/app/Notification.Builder.html

     Notification noti = new Notification.Builder(mContext)
         .setContentTitle("New mail from " + sender.toString())
         .setContentText(subject)
         .setSmallIcon(R.drawable.new_mail)
         .setLargeIcon(aBitmap)
         .setContentIntent(yourPendingIntent)
         .build();
    

    You currently have the following :

    Notification notification = new Notification(icon, message, when);
    

    This constructor is deprecated in favor of the Notification.Builder which would look like the following :

    Notification notification = new Notification.Builder(context)
        .setContentText(message)
        .setSmallIcon(icon)
        .setWhen(when)
        .build();
    
    0 讨论(0)
  • 2020-12-16 12:03

    As for the original question, this class works fine, if your system supports GCMBaseIntentService:

    package ...;
    
    import android.app.Notification;
    import android.app.NotificationManager;
    import android.app.PendingIntent;
    import android.content.Context;
    import android.content.Intent;
    import android.util.Log;
    
    import com.google.android.gcm.GCMBaseIntentService;
    
    import static com.example.taxiprofessional.CommonUtilities.SENDER_ID;
    import static com.example.taxiprofessional.CommonUtilities.displayMessage;
    
    public class GCMIntentService extends GCMBaseIntentService {
    
        private static final String TAG = "GCMIntentService";
    
     public GCMIntentService() {
         super(SENDER_ID);
     }
    
     /**
      * Method called on device registered
      **/
     @Override
     protected void onRegistered(Context context, String registrationId) {
         Log.i(TAG, "Device registered: regId = " + registrationId);
         displayMessage(context, "Your device registred with GCM");
         AccountInformation info=AccountInformation.sharedInstance();
         ServerUtilities.register(context, info.email, info.password, registrationId);
     }
    
     /**
      * Method called on device un registred
      * */
     @Override
     protected void onUnregistered(Context context, String registrationId) {
         Log.i(TAG, "Device unregistered");
         displayMessage(context, getString(R.string.gcm_unregistered));
         ServerUtilities.unregister(context, registrationId);
     }
    
     /**
      * Method called on Receiving a new message
      * */
     @Override
     protected void onMessage(Context context, Intent intent) {
         Log.i(TAG, "Received message");
         String message = intent.getExtras().getString("price");
    
         displayMessage(context, message);
         // notifies user
         generateNotification(context, message);
     }
    
     /**
      * Method called on receiving a deleted message
      * */
     @Override
     protected void onDeletedMessages(Context context, int total) {
         Log.i(TAG, "Received deleted messages notification");
         String message = getString(R.string.gcm_deleted, total);
         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);
         displayMessage(context, getString(R.string.gcm_error, errorId));
     }
    
     @Override
     protected boolean onRecoverableError(Context context, String errorId) {
         // log message
         Log.i(TAG, "Received recoverable error: " + errorId);
         displayMessage(context, getString(R.string.gcm_recoverable_error,
                 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) {
         int icon = R.drawable.taxi_profi;
         long when = System.currentTimeMillis();
         NotificationManager notificationManager = (NotificationManager)
                 context.getSystemService(Context.NOTIFICATION_SERVICE);
         Notification notification = new Notification(icon, message, when);
    
         String title = context.getString(R.string.app_name);
    
         Intent notificationIntent = new Intent(context, Dashboard.class);
         // set intent so it does not start a new activity
         notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |
                 Intent.FLAG_ACTIVITY_SINGLE_TOP);
         PendingIntent intent =
                 PendingIntent.getActivity(context, 0, notificationIntent, 0);
         notification.setLatestEventInfo(context, title, message, intent);
         notification.flags |= Notification.FLAG_AUTO_CANCEL;
    
         // Play default notification sound
         notification.defaults |= Notification.DEFAULT_SOUND;
    
         // Vibrate if vibrate is enabled
         notification.defaults |= Notification.DEFAULT_VIBRATE;
         notificationManager.notify(0, notification);      
    
     }
    
    }
    
    0 讨论(0)
提交回复
热议问题