public class MainService extends Service{
private String TAG = "MainService";
public ServiceBinder mBinder = new ServiceBinder(); /* 数据通信的桥梁 */
/* 重写Binder的onBind函数,返回派生类 */
@Override
public IBinder onBind(Intent arg0) {
return null;
}
@Override
public void onCreate() {
Toast.makeText( MainService.this, "Service Create, Send BroadCast...", Toast.LENGTH_SHORT).show();
SendServiceBroadCast();
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Toast.makeText(MainService.this, "Service StartCommand", Toast.LENGTH_SHORT).show();
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
Toast.makeText( MainService.this, "Service Destroy", Toast.LENGTH_SHORT).show();
}
/* 第二种模式通信:Broadcast广播 */
public void SendServiceBroadCast() throws InterruptedException {
Log.d(TAG, "ServiceThread===>>startDownload() executed===>>线程ID:"+Thread.currentThread().getId());
Toast.makeText( MainService.this, "Send BroadCast now...", Toast.LENGTH_SHORT).show();
Intent intent = new Intent();
intent.setAction("me.homeway.servicebinder.BroadcastTest");
intent.putExtra("value", 1000);
sendBroadcast(intent);
Toast.makeText( MainService.this, "Sent! Did you receive?", Toast.LENGTH_SHORT).show();
}
}
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name">
<receiver android:name=".BroadcastTest">
<intent-filter>
<action android:name="me.homeway.servicebinder.BroadcastTest"></action>
</intent-filter>
</receiver>
...
</application>
public class BroadcastTest extends BroadcastReceiver{
private NetworkInfo netInfo;
private ConnectivityManager mConnectivityManager;
public void onReceive(Context context, Intent intent) {
Bundle extras = intent.getExtras();
if (extras != null) {
if(extras.containsKey("value")){
/* 这里可以做下载,发包等事件 */
Toast.makeText( context, "收到广播 => "+extras.get("value"), Toast.LENGTH_SHORT).show();
System.out.println("Value is:"+extras.get("value"));
}
}
}
}
//=======================================================动态注册广播方式
1
、在Activity中写一个内部类实现广播的接收:
private
class
MyBroadcastReceiver
extends
BroadcastReceiver {
@Override
publicvoid onReceive(Context context, Intent intent) {
Toast.makeText(MainActivity.
this
, intent.getStringExtra(
"back"
), Toast.LENGTH_SHORT).show();
}
}
2
、并在Activity中动态的注册这个监听器:
private
BroadcastReceiver rec =
null
;
this
.rec =
new
MyBroadcastReceiver();
IntentFilter filter =
new
IntentFilter();
filter.addAction(
"org.load.action.MSG"
);/ 这里的Action要和Service发送广播时使用的Action一样
MainActivity.
this
.registerReceiver(
this
.rec, filter);
// 动态注册BroadcastReceiver
3
、在Service中实现广播的发送:
ntent it =
new
Intent(
"org.load.action.MSG"
);
// 这里要直接放Action的参数,不能是指定一个对象和一个class,并且这里的Action要和Service发送广播时使用的Action一样
it.putExtra(
"back"
,
this
.msg +
",来自Service"
);
super
.sendBroadcast(it);
4
、注意:要在Manifest中注册这个Service
全部代码:
MainActivity.java:
publicclass MainActivity
extends
Activity {
private
Button but =
null
;
private
BroadcastReceiver rec =
null
;
@Override
protectedvoid onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this
.but = (Button)
super
.findViewById(R.id.but);
this
.but.setOnClickListener(
new
OnClickAdapter());
this
.rec =
new
MyBroadcastReceiver();
IntentFilter filter =
new
IntentFilter();
filter.addAction(
"org.load.action.MSG"
);
// 这里的Action要和Service发送广播时使用的Action一样
MainActivity.
this
.registerReceiver(
this
.rec, filter);
// 动态注册BroadcastReceiver
}
privateclass OnClickAdapter
implements
OnClickListener {
@Override
publicvoid onClick(View v) {
Intent intent =
new
Intent(MainActivity.
this
, MyService.
class
);
intent.setAction(
"org.load.action.ACT"
);
intent.putExtra(
"msg"
,
"这条消息要通过service返回"
);
MainActivity.
this
.startService(intent);
}
}
privateclass MyBroadcastReceiver
extends
BroadcastReceiver {
@Override
publicvoid onReceive(Context context, Intent intent) {
Toast.makeText(MainActivity.
this
, intent.getStringExtra(
"back"
), Toast.LENGTH_SHORT).show();
}
}
}
MyService.java:
publicclass MyService
extends
Service {
private
String msg =
null
;
@Override
public
IBinder onBind(Intent intent) {
returnnull;
}
@Override
publicvoid onCreate() {
super
.onCreate();
}
@Override
publicint onStartCommand(Intent intent,
int
flags,
int
startId) {
if
(
"org.load.action.ACT"
.equals(intent.getAction())) {
this
.msg = intent.getStringExtra(
"msg"
);
this
.sendBroadcastToActivity();
}
returnsuper.onStartCommand(intent, flags, startId);
}
@Override
publicvoid onDestroy() {
super
.onDestroy();
}
publicvoid sendBroadcastToActivity() {
Intent it =
new
Intent(
"org.load.action.MSG"
);
it.putExtra(
"back"
,
this
.msg +
",来自Service"
);
super
.sendBroadcast(it);
}
}
Manifest.xml:
<service android:name=
"org.load.test.MyService"
/>