2017-11-07 5 views
1

내 Android 앱에서 알림을 만들고 있지만 사용자가 다른 모든 간단한 알림처럼 왼쪽이나 오른쪽으로 스 와이프하면 알림 표시 줄에서 알림이 지워지 길 원합니다. 내 일을 시도했지만 작동하지 않습니다. 이 내 알림 코드알림을 스 와이프하여 닫을 수 없습니다.

private void showNotificationPause() { 
// Using RemoteViews to bind custom layouts into Notification 
     RemoteViews views = new RemoteViews(getPackageName(), 
       R.layout.status_bar_old); 
     RemoteViews bigViews = new RemoteViews(getPackageName(), 
       R.layout.status_bar_expanded); 
// showing default album image 
     views.setViewVisibility(R.id.status_bar_icon, View.GONE); 
     views.setViewVisibility(R.id.status_bar_album_art, View.VISIBLE); 
     bigViews.setImageViewBitmap(R.id.status_bar_album_art, 
       Constants.getDefaultAlbumArt(this)); 

     Intent notificationIntent = new Intent(this, MusicActivity.class); 
     notificationIntent.setAction(Constants.ACTION.MAIN_ACTION); 
//  notificationIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK 
//    | Intent.FLAG_ACTIVITY_CLEAR_TASK); 
     PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, 
       notificationIntent, 0); 

     Intent previousIntent = new Intent(this, NotificationService.class); 
     previousIntent.setAction(Constants.ACTION.PREV_ACTION); 
     PendingIntent ppreviousIntent = PendingIntent.getService(this, 0, 
       previousIntent, 0); 

     Intent playIntent = new Intent(this, NotificationService.class); 
     playIntent.setAction(Constants.ACTION.PLAY_ACTION); 
     PendingIntent pplayIntent = PendingIntent.getService(this, 0, 
       playIntent, 0); 

     Intent nextIntent = new Intent(this, NotificationService.class); 
     nextIntent.setAction(Constants.ACTION.NEXT_ACTION); 
     PendingIntent pnextIntent = PendingIntent.getService(this, 0, 
       nextIntent, 0); 

     Intent closeIntent = new Intent(this, NotificationService.class); 
     closeIntent.setAction(Constants.ACTION.STOPFOREGROUND_ACTION); 
     PendingIntent pcloseIntent = PendingIntent.getService(this, 0, 
       closeIntent, 0); 

     views.setOnClickPendingIntent(R.id.status_bar_play, pplayIntent); 
     bigViews.setOnClickPendingIntent(R.id.status_bar_play, pplayIntent); 

     views.setOnClickPendingIntent(R.id.status_bar_next, pnextIntent); 
     bigViews.setOnClickPendingIntent(R.id.status_bar_next, pnextIntent); 

     views.setOnClickPendingIntent(R.id.status_bar_prev, ppreviousIntent); 
     bigViews.setOnClickPendingIntent(R.id.status_bar_prev, ppreviousIntent); 

     views.setOnClickPendingIntent(R.id.status_bar_collapse, pcloseIntent); 
     bigViews.setOnClickPendingIntent(R.id.status_bar_collapse, pcloseIntent); 

     views.setImageViewResource(R.id.status_bar_play, 
       R.drawable.play); 
     bigViews.setImageViewResource(R.id.status_bar_play, 
       R.drawable.play); 

     views.setTextViewText(R.id.status_bar_track_name, song_name.get(pos)); 
     bigViews.setTextViewText(R.id.status_bar_track_name, song_name.get(pos)); 

     views.setTextViewText(R.id.status_bar_artist_name, singer.get(pos)); 
     bigViews.setTextViewText(R.id.status_bar_artist_name, singer.get(pos)); 

     bigViews.setTextViewText(R.id.status_bar_album_name, ""); 
     status = new NotificationCompat.Builder(this) 
       .setAutoCancel(true) 
       .setOngoing(false) 
       .setContentIntent(PendingIntent.getActivity(getApplicationContext(), 
         Constants.NOTIFICATION_ID.FOREGROUND_SERVICE, 
         notificationIntent, 0)) 
       .build(); 

     status.flags = Notification.FLAG_AUTO_CANCEL; 
//  status = new Notification.Builder(this) 
//    .setAutoCancel(true) 
//    .setOngoing(false) 
//    .setContentIntent(PendingIntent.getActivity(getApplicationContext(), Constants.NOTIFICATION_ID.FOREGROUND_SERVICE, new Intent(), 0)) 
//    .build(); 
     status.contentView = views; 
     status.bigContentView = bigViews; 
//  status.flags = Notification.FLAG_AUTO_CANCEL; 
//  status.flags = Notification.FLAG_LOCAL_ONLY; 
//  status.flags = Notification.F; 
     status.icon = R.drawable.status; 
     status.contentIntent = pendingIntent; 
     Uri uri = Uri.parse(mySongs.get(pos)); 
     NotificationTarget notificationTarget = new NotificationTarget(getApplicationContext(), 
       bigViews, 
       R.id.status_bar_album_art, 
       status, 
       101 
     ); 
     NotificationTarget notificationTarget_sm = new NotificationTarget(getApplicationContext(), 
       views, 
       R.id.status_bar_album_art, 
       status, 
       101); 

     MediaMetadataRetriever mmr = new MediaMetadataRetriever(); 
     try { 
      mmr.setDataSource(getApplicationContext(), Uri.parse(URLDecoder.decode(uri.toString()))); 
      if (mmr.getEmbeddedPicture() != null) { 
       Glide 
         .with(getApplicationContext()) 
         .load(mmr.getEmbeddedPicture()) 
         .asBitmap() 
         .placeholder(R.drawable.logo2) 
         .into(notificationTarget_sm); 
       Glide 
         .with(getApplicationContext()) 
         .load(mmr.getEmbeddedPicture()) 
         .asBitmap() 
         .error(R.drawable.logo2) 
         .placeholder(R.drawable.logo2) 
         .into(notificationTarget); 
      } 
     }catch (Exception e){ 

     } 
     NotificationManager notificationManager= (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE); 
     notificationManager.notify(Constants.NOTIFICATION_ID.FOREGROUND_SERVICE, status); 

//  status.notify(); 
//  startForeground(Constants.NOTIFICATION_ID.FOREGROUND_SERVICE, status); 
    } 

이다 나는 알림에 대해 잘 모른다. 아무도 무슨 일이 일어 났는지 생각하고 있니?

+0

'startForeground'를 사용하지 않으시겠습니까? 깨끗하게 시도하고 빌드하십시오. –

+0

어떤 장치를 실행하고 있습니까? – nhoxbypass

+0

@nhoxbypass Android N –

답변

2

As indicated in comments, 당신은 startForeground를 제거해야 사용자가 알림을 제거하지 못하게하기 때문에 NotificationManager#notify

+0

@Pavneey_Singh,이 솔루션에 문제가 있습니다. 노래가 연주 될 때 나는 활동 만 파괴하고 잠시 후 노래 일시 중지 및 알림 버튼이 작동합니다. 무슨 일이 있었는지 아시나요 ?? –

+0

@SunnyBhadana 가장 좋은 해결책은 코드를 디버그하고 몇 가지 중단 점을 사용하는 것입니다. 그러나 가장 좋은 추측은 지연을 유발하는 일부 구성 요소의 레크리에이션 (팽창 또는 무언가) 때문일 것입니다. –

0

AFAIK, 당신 수 없습니다 숨기기 통지하여 전경 서비스 (startForGround()으로 서비스 시작) 실행된다. 사용자가 응용 프로그램을 백그라운드에서 실행할 수 있다는 것은 Google의 규칙입니다.

startForGround()을 삭제 해보세요. 이미 여기에 게시

notification.defaults |= Notification.DEFAULT_SOUND; 
notification.defaults |= Notification.DEFAULT_VIBRATE; 
notification.defaults |= Notification.DEFAULT_LIGHTS; 
notification.flags |= Notification.FLAG_AUTO_CANCEL; 

상세 대답 : 당신은 여전히 ​​startForGround()을 유지하고 시도, 한번 시도해 다음 코드로 플래그를 설정 대체 할 것인지 또는 https://stackoverflow.com/a/14373655/5282585