2017-04-03 6 views
-1

나는 통지의 버튼을 눌러서 행동을 수행하는 방법을 가지고있다.Floating Action Button에서 src를 Service.class에서 어떻게 변경합니까?

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 

      } 
     } 
    } 

두 경우에 나는 Player.ctivity 클래스에서 FAB 아이콘을 Service.class에서 변경해야합니다. "정적"을 사용하지 않고 싱글 톤없이 FAB에 어떻게 액세스 할 수 있습니까?

PlayerActivity이 추가 :

public void changeFloatingActionButtonIcon(int fabIcon) { 

    fab.setImageResource(fabIcon); 
}; 

이 Services.class이 추가 : 서비스에서

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

사용 브로드 캐스트 리시버 클래스 –

+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); 

+0

그게 내가 필요로하는 것입니다. 고마워요! – Haze

0

이에게 시험을주십시오 활동 내 :

// 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

"getActivity()"메서드를 해결할 수 없습니다 – Haze

+0

컨텍스트로 바꾸십시오 –