浏览代码

Move to NotificationCompat.Builder to create/replace notification (done for Android M compatibility @ compile target)

Andy Scherzinger 9 年之前
父节点
当前提交
9bdfc304c6
共有 1 个文件被更改,包括 32 次插入32 次删除
  1. 32 32
      src/com/owncloud/android/media/MediaService.java

+ 32 - 32
src/com/owncloud/android/media/MediaService.java

@@ -36,6 +36,7 @@ import android.net.wifi.WifiManager;
 import android.net.wifi.WifiManager.WifiLock;
 import android.os.IBinder;
 import android.os.PowerManager;
+import android.support.v7.app.NotificationCompat;
 import android.widget.Toast;
 
 import java.io.IOException;
@@ -123,7 +124,6 @@ public class MediaService extends Service implements OnCompletionListener, OnPre
 
     /** Notification to keep in the notification bar while a song is playing */
     private NotificationManager mNotificationManager;
-    private Notification mNotification = null;
 
     /** File being played */
     private OCFile mFile;
@@ -142,8 +142,9 @@ public class MediaService extends Service implements OnCompletionListener, OnPre
 
     /** Control panel shown to the user to control the playback, to register through binding */
     private MediaControlView mMediaController;
-    
 
+    /** Notification builder to create notifications, new reuse way since Android 6 */
+    private NotificationCompat.Builder mNotificationBuilder;
     
     /**
      * Helper method to get an error message suitable to show to users for errors occurred in media playback,
@@ -226,6 +227,8 @@ public class MediaService extends Service implements OnCompletionListener, OnPre
                 createWifiLock(WifiManager.WIFI_MODE_FULL, MEDIA_WIFI_LOCK_TAG);
 
         mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
+        mNotificationBuilder = new NotificationCompat.Builder(this);
+        mNotificationBuilder.setColor(this.getResources().getColor(R.color.primary));
         mAudioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
         mBinder = new MediaServiceBinder(this);
     }
@@ -286,7 +289,6 @@ public class MediaService extends Service implements OnCompletionListener, OnPre
             mState = State.PLAYING;
             setUpAsForeground(String.format(getString(R.string.media_state_playing), mFile.getFileName()));
             configAndStartMediaPlayer();
-            
         }
     }
 
@@ -532,22 +534,25 @@ public class MediaService extends Service implements OnCompletionListener, OnPre
     /** 
      * Updates the status notification
      */
-    @SuppressWarnings("deprecation")
     private void updateNotification(String content) {
+        String ticker = String.format(getString(R.string.media_notif_ticker), getString(R.string.app_name));
+
         // TODO check if updating the Intent is really necessary
         Intent showDetailsIntent = new Intent(this, FileDisplayActivity.class);
         showDetailsIntent.putExtra(FileActivity.EXTRA_FILE, mFile);
         showDetailsIntent.putExtra(FileActivity.EXTRA_ACCOUNT, mAccount);
         showDetailsIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
-        mNotification.contentIntent = PendingIntent.getActivity(getApplicationContext(), 
-                                                                (int)System.currentTimeMillis(), 
-                                                                showDetailsIntent, 
-                                                                PendingIntent.FLAG_UPDATE_CURRENT);
-        mNotification.when = System.currentTimeMillis();
-        //mNotification.contentView.setTextViewText(R.id.status_text, content);
-        String ticker = String.format(getString(R.string.media_notif_ticker), getString(R.string.app_name));
-        mNotification.setLatestEventInfo(getApplicationContext(), ticker, content, mNotification.contentIntent);
-        mNotificationManager.notify(R.string.media_notif_ticker, mNotification);
+
+        mNotificationBuilder.setContentIntent(PendingIntent.getActivity(getApplicationContext(),
+                (int) System.currentTimeMillis(),
+                showDetailsIntent,
+                PendingIntent.FLAG_UPDATE_CURRENT));
+        mNotificationBuilder.setWhen(System.currentTimeMillis());
+        mNotificationBuilder.setTicker(ticker);
+        mNotificationBuilder.setContentTitle(ticker);
+        mNotificationBuilder.setContentText(content);
+
+        mNotificationManager.notify(R.string.media_notif_ticker, mNotificationBuilder.build());
     }
 
     
@@ -558,35 +563,29 @@ public class MediaService extends Service implements OnCompletionListener, OnPre
      * 
      * A notification must be created to keep the user aware of the existance of the service.
      */
-    @SuppressWarnings("deprecation")
     private void setUpAsForeground(String content) {
+        String ticker = String.format(getString(R.string.media_notif_ticker), getString(R.string.app_name));
+
         /// creates status notification
         // TODO put a progress bar to follow the playback progress
-        mNotification = new Notification();
-        mNotification.icon = android.R.drawable.ic_media_play;
+        mNotificationBuilder.setSmallIcon(R.drawable.ic_play_arrow);
         //mNotification.tickerText = text;
-        mNotification.when = System.currentTimeMillis();
-        mNotification.flags |= Notification.FLAG_ONGOING_EVENT;
-        //mNotification.contentView.setTextViewText(R.id.status_text, "ownCloud Music Player");     // NULL POINTER
-        //mNotification.contentView.setTextViewText(R.id.status_text, getString(R.string.downloader_download_in_progress_content));
-
+        mNotificationBuilder.setWhen(System.currentTimeMillis());
+        mNotificationBuilder.setOngoing(true);
         
         /// includes a pending intent in the notification showing the details view of the file
         Intent showDetailsIntent = new Intent(this, FileDisplayActivity.class);
         showDetailsIntent.putExtra(FileActivity.EXTRA_FILE, mFile);
         showDetailsIntent.putExtra(FileActivity.EXTRA_ACCOUNT, mAccount);
         showDetailsIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
-        mNotification.contentIntent = PendingIntent.getActivity(getApplicationContext(), 
-                                                                (int)System.currentTimeMillis(), 
-                                                                showDetailsIntent, 
-                                                                PendingIntent.FLAG_UPDATE_CURRENT);
-        
-        
-        //mNotificationManager.notify(R.string.downloader_download_in_progress_ticker, mNotification);
-        String ticker = String.format(getString(R.string.media_notif_ticker), getString(R.string.app_name));
-        mNotification.setLatestEventInfo(getApplicationContext(), ticker, content, mNotification.contentIntent);
-        startForeground(R.string.media_notif_ticker, mNotification);
-        
+        mNotificationBuilder.setContentIntent(PendingIntent.getActivity(getApplicationContext(),
+                (int) System.currentTimeMillis(),
+                showDetailsIntent,
+                PendingIntent.FLAG_UPDATE_CURRENT));
+        mNotificationBuilder.setContentTitle(ticker);
+        mNotificationBuilder.setContentText(content);
+
+        startForeground(R.string.media_notif_ticker, mNotificationBuilder.build());
     }
 
     /**
@@ -639,6 +638,7 @@ public class MediaService extends Service implements OnCompletionListener, OnPre
         mState = State.STOPPED;
         releaseResources(true);
         giveUpAudioFocus();
+        stopForeground(true);
         super.onDestroy();
     }