2017-04-03 114 views
-1

我有方法,它通过按下通知中的按钮来完成操作。如何从Service.class中的浮动操作按钮中更改src?

private void handleIncomingActions(Intent playbackAction) { 
     if (playbackAction == null || playbackAction.getAction() == null) { 
      return; 
     } 

     String actionString = playbackAction.getAction(); 

     if (actionString.equalsIgnoreCase(ACTION_PLAY)) { 
      if (mediaPlayer != null) { 
       playMedia(); 
      } 
     } 
     if (actionString.equalsIgnoreCase(ACTION_PAUSE)) { 
      if (mediaPlayer != null) { 
       pauseMedia(); 

       //HERE NEED TO CHANGE SRC 
      } 
     } 
     if (actionString.equalsIgnoreCase(ACTION_CLOSE)) { 
      if (mediaPlayer != null) { 
       stopService(new Intent(this, MediaService.class)); 
       getApplicationContext().unbindService(PlayerActivity.serviceConnection); 
       PlayerActivity.serviceBound = false; 

       //HERE NEED TO CHANGE SRC 

      } 
     } 
    } 

在两种情况下,我需要在Service.class的PlayerActivity类中更改FAB的图标。 如何在不使用“静态”且不使用单例的情况下访问FAB?

+0

利用广播reciever类 –

+0

@quicklearner在这之前,我也只是通过广播,但我还是不明白如何访问FAB如果它不是静态的。 – Haze

回答

1

在服务:

public static final String SERVICE_REQUEST = "com.example.app.service.SERVICE_REQUEST"; 
// ... 
Intent data = new Intent(SERVICE_REQUEST); 
LocalBroadcastManager.getInstance(ServiceClass.this).sendBroadcast(data); 

在活动中:

// in onCreate for example 
reseiver = new BroadcastReceiver() { 
      @Override 
      public void onReceive(Context context, Intent intent) { 
       // update your fab here 
      } 
} 
// ... 
@Override 
public void onStop() { 
     LocalBroadcastManager.getInstance(this).unregisterReceiver(reseiver); 
     super.onStop(); 
} 

@Override 
public void onStart() { 
     super.onStart(); 
     LocalBroadcastManager.getInstance(this).registerReceiver(reseiver, new IntentFilter(ServiceClass.SERVICE_REQUEST)); 
} 
+0

这就是我所需要的。谢谢! – Haze

0

这给一试:

一下添加到PlayerActivity

public void changeFloatingActionButtonIcon(int fabIcon) { 

    fab.setImageResource(fabIcon); 
}; 

一下添加到Services.class:

((PlayerActivity) getActivity()).changeFloatingActionButtonIcon(R.drawable.icon); 
+0

“无法解析方法'getActivity()” – Haze

+0

将其替换为上下文 –