2016-06-18 7 views
0

У меня есть служба, в которой я хочу иметь приемник местного вещания. Я хочу получить значение от активности до моих сервисов onCreate.Android: как иметь приемник местного вещания внутри службы

Примечание. Я могу получить значение из своей деятельности в службу onStartCommand() с использованием намерения. Но здесь я хочу получить ценность от активности в onCreate службы.

Ниже мой файл службы:

public class MediaServiceSimha extends Service { 

     private MediaPlayer player; 
     String musicpath; 
     private ResponseReceiver receiver; 

     public MediaServiceSimha() {} 

     @Override 
     public IBinder onBind(Intent intent) { 
      return null; 
     } 

     @Override 
     public void onDestroy() { 
      LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(this); 
      localBroadcastManager.unregisterReceiver(receiver); 
      super.onDestroy(); 
     } 

     @Override 
     public boolean onUnbind(Intent intent) { 
      return super.onUnbind(intent); 
     } 

     @ 
     Override 
     public int onStartCommand(Intent intent, int flags, int startId) { 
      player.start(); 
      return super.onStartCommand(intent, flags, startId); 
     } 

     @Override 
     public void onCreate() { 
      super.onCreate(); 
      IntentFilter broadcastFilter = new IntentFilter("com.example.myintentserviceapp.intent_service.ALL_DONE"); 
      receiver = new ResponseReceiver(); 
      LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(this); 
      localBroadcastManager.registerReceiver(receiver, broadcastFilter); 
     } 

     public class ResponseReceiver extends BroadcastReceiver { 

      @Override 
      public void onReceive(Context context, Intent intent) { 
       musicpath = intent.getStringExtra("musicpath"); 
      } 
     } 
    } 

Ниже мой файл деятельности, где я хочу передать значение, называемое musicpath

public class ServiceTest extends AppCompatActivity { 
    Intent intent; 

    public static final String TEXT_INPUT = "inText"; 
    //MediaServiceSimha mediaServiceSimha; 



    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     L.m("activity_oncreate_starting"); 
     setContentView(R.layout.activity_service_test); 
     intent= new Intent(this,MediaServiceSimha.class); 

     startService(intent); 

     Intent broadcastIntent = new Intent(); 
     broadcastIntent.setAction("com.example.myintentserviceapp.intent_service.ALL_DONE"); 
     broadcastIntent.putExtra("musicpath", "/storage/emulated/0/Download/1.mp3"); 
     LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(this); 
     localBroadcastManager.sendBroadcast(broadcastIntent) 
    } 


} 

После запуска, он говорит, что значение musicpath равно нулю.

Как это сделать?

+0

вам вообще не нужно: передайте «музыкальный путь» в дополнительных целях при вызове 'startService' – pskink

+0

. Я очень смущен вашим вопросом: факт, что вы регистрируете вещательный приемник в onCreate вашего сервиса, Я получаю намерение там. просто передавайте любую информацию, которая вам нужна в намерении, каждый раз, когда вам нужно использовать startService ... – Creos

+0

Но почему вы это делаете? Если вы действительно хотите передать PATH для обслуживания, тогда положите его на «Экстра (..)» и получите в сервисе –

ответ

0

Моя цель состояла в том, чтобы передать значение переменной непосредственно в oncreate в классе обслуживания.

Я попытался Reciver LocalBroadcast и также onbindservices - onServiceConnected

Оба из них я обнаружил, что они будут только получить казнены недо OnCreate -> onbind/onstartcommand получить выполнен в услугах.

Таким образом, только вариант левой onstartcommand()

Таким образом, когда мы передаем значение с помощью намерения, то они могут быть использованы непосредственно внутри onstartcommand.

-1

когда вы звоните запуска службы это не означает, что он будет звонить сразу, так что ждать OnCreate обслуживания всякий раз, когда ваша служба getstarted вы можете отправить обратный вызов вашей деятельности, то вы можете транслировать значения к службе

 public service callback() // callback from service started 
     { 
     Intent broadcastIntent = new Intent(); 
       broadcastIntent.setAction("com.example.myintentserviceapp.intent_service.ALL_DONE"); 
       broadcastIntent.putExtra("musicpath", "/storage/emulated/0/Download/1.mp3"); 
       LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(this); 
       localBroadcastManager.sendBroadcast(broadcastIntent) 
     } 


     public class MediaServiceSimha extends Service { 
     @Override 
      public void onCreate() { 
       super.onCreate(); 
       IntentFilter broadcastFilter = new IntentFilter("com.example.myintentserviceapp.intent_service.ALL_DONE"); 
       receiver = new ResponseReceiver(); 
       LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(this); 
       localBroadcastManager.registerReceiver(receiver, broadcastFilter); 
       sendCallback(); // using interface or broadcast receiver to send callback to activity 
      } 

} 
+0

, что означает комментарий '// использование интерфейса или широковещательного приемника для отправки обратного вызова в действие. В первый раз я сталкиваюсь с вызовом public service callback(). Я совершенно новичок в этом. вы можете помочь мне больше об этом –

+0

@SanthoshYedidi вам вообще не нужно 'LocalBroadcastManager': просто передайте« musicpath »в дополнительных случаях при вызове' startService' – pskink

+0

Но я хочу использовать музыкальный путь в oncreate, а не в onstartcommand(). onCreate начинается сначала, а затем onstartcommand –