【发布时间】:2016-06-18 05:19:09
【问题描述】:
我有一个服务,我想要一个本地广播接收器。我想从活动中获得一个价值到我的服务 onCreate。
注意:我可以使用意图在 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值为null。
怎么做?
【问题讨论】:
-
你根本不需要它:在调用
startService时将“musicpath”传递给 extras -
我对您的问题感到非常困惑:您在服务的 onCreate 中注册广播接收器这一事实并不意味着您会在那里收到意图。每次您需要使用 startService 时,只需在意图中传递您需要的任何信息...
-
但是你为什么要这样做呢?如果您真的想将 PATH 传递给服务,请将其放在
Extra(..)并在服务中接收 -
当你调用start service时并不意味着它会立即调用,所以等待服务的oncreate,当你收到服务的回调时,你可以发送广播
标签: android android-service localbroadcastmanager