0

我正在使用 RemoteViews 自定义通知布局的自定义通知。一切正常,除了当服务类崩溃并自行再次调用时我面临的问题,我为 RemoteView 创建的全局值变为空。所以最终它是抛出NullPointerException

服务类崩溃场景:

从通知开始活动PendingIntent时,当用户从最近的任务中滑动活动时,我的应用程序崩溃了。为此,我应用了如下某种逻辑:

(i)onStartCommandService 类中方法START_STICKY的返回类型从更改为START_STICKY_COMPATIBILITY

(ii)检查null的意图条件如下:

//If the intent is null, do not execute the switch statement. If it is not null perform the action.

  if (intent==null)
          return 0;

我的要求:

我有一个带有播放和暂停功能的音乐播放器,我需要根据PendintIntent分配给视图来处理播放/暂停情况。

单击视图时使用 PendingIntent 的代码:

Intent intent = new Intent(context, ServiceExample.class);
intent.setAction(CLICK_PLAY_PAUSE);
PendingIntent musicPlayPauseClickIntent = PendingIntent.getService(context, 0,intent, 0);
mRemoteViewsMusics.setOnClickPendingIntent(R.id.img_play_pause, musicPlayPauseClickIntent);

用于通过单击通知中的缩略图打开活动的代码:

 Intent openAcivityIntent = new Intent(context, toClass);
 openAcivityIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
 PendingIntent.getActivity(context,0,openAcivityIntent,
                PendingIntent.FLAG_UPDATE_CURRENT);

用于处理服务类中的单击事件的代码。

@Override
public int onStartCommand(Intent intent, int flags, int startId) {

      case CLICK_PLAY_PAUSE:

       //NOTE: Getting `NullPointerException` on mRemoteViewsMusics

        mRemoteViewsMusics.setImageViewResource(R.id.img_play_pause,
        R.drawable.ic_noti_pause_circle);
        mMediaPlayer.start();
        break;

        return START_STICKY_COMPATIBILITY; 

      case TYPE_MUSIC:

        showMusicNotification();
        break;




    }

创建 RemoteViews 的代码:

public void showMusicNotification(){

    private RemoteViews mRemoteViewsMusics;

     mRemoteViewsMusics = new RemoteViews(getPackageName(),
                    R.layout.music_notification);

}

注意:无论何时onStartCommand()调用,我都会根据通知类型更新通知类型。类型基于Intent启动时分配的标志Service

我已经被这个问题困扰了一个多星期。请帮我纠正这些问题。任何类型的提示或建议都会对我有所帮助。提前致谢。

4

0 回答 0