- 浏览: 34315 次
- 性别:
- 来自: 深圳
最新评论
概述
在Android中,有一些操作完成以后,会发送广播,比如说发出一条短信,或打出一个电话,如果某个程序接收了这个广播,就会做相应的处理。这个广播跟我们传统意义中的电台广播有些相似之处。之所以叫做广播,就是因为它只负责“说”而不管你“听不听”,也就是不管你接收方如何处理。另外,广播可以被不只一个应用程序所接收,当然也可能不被任何应用程序所接收。
什么是Broadcast Receiver
BroadcastReceiver是Android应用程序中的第三个组件。Broadcast Reciver和事件处理机制类似,不同的是事件处理机制是应用程序组件级别的,比如一个按钮的OnClickListener事件,只能够在一个应用程序中处理。而广播事件处理机制是系统级别的,不同的应用程序都可以处理广播事件。
如何使用Broadcast Receiver
可以通过构建Intent对象,然后调用sendBroadcast()方法将广播发出。事件的接受是通过一个继承自BroadcastReceiver的类来实现的。继承后重写onReceiver()方法,在该方法中响应事件。当然不能忘记在AndroidManifest.xml文件中注册BroadcastReceiver。
一般继承自BroadcastReceiver的类,是我们根据自己的需求所自定义的。这个自定义的类的作用,就是用来处理android当中所发出的广播事件。也就是说,Android操作系统中发出的广播,由BroadcastReceiver这个类来接收。接收到以后,就会调用这个类中的onReceive()方法来进行处理。那么,在Android系统中,有很多的广播,如何才能确定,一个receiver负责接收什么类型的广播呢?对了。这就是要去书写AndroidManifest.xml文件。我们需要在AndroidManifest.xml里进行注册,将receiver注册到应用程序中。这个receiver应该接收什么类型的事件是由Intent-filter来决定的。
对于onReceive方法,一旦方法返回。系统就会认为对象已经被完成。从而不再是活动状态。
按照上述说明。简单的看一个例子,代码如下:
[java] view plaincopy
public class BroadcastReceiverTest extends Activity {
private Button myButton;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
myButton = (Button)findViewById(R.id.myButton);
myButton.setOnClickListener(newButton.OnClickListener(){
@Override
public void onClick(View v) {
Intent myIntent = new Intent();
myIntent.setAction(myIntent.ACTION_EDIT);
BroadcastReceiverTest.this.sendBroadcast(myIntent);//发送广播
}
});
}
}
需要编写BroadcastReceiver类,代码如下:
[java] view plaincopy
public class ReceiverTest extends BroadcastReceiver {
public ReceiverTest(){
System.out.println("ReceiverTest");
}
@Override
public void onReceive(Context arg0, Intent arg1) {
System.out.println("onReceive");
}
}
在AndroidManifest.xml中注册的代码如下:
[html] view plaincopy
<receiver
android:label="@string/app_name"
android:name=".ReceiverTest" >
<intent-filter >
<action android:name="android.intent.action.EDIT" />
</intent-filter>
</receiver>
编译完成之后,我们在控制台会得到如图所示的结果:
如果连续按两次按钮,则会出现两次。如图所示:
在上面的例子中,Intent的Action类型为ACTION_EDIT,而在AndroidManifest.xml中注册的receiver类型也是edit,<action android:name="android.intent.action.EDIT"/>
,这就表明这两个Action进行了匹配。即执行了sendBroadcast方法之后,类型为edit的receiver就可以进行接收了。类型匹配成功的话,才会生成receiver的对象,从而调用onReceiver方法。上文中已经谈到,每次接收广播都会生成一个新的receiver对象。在处理完毕之后,这个对象就不会再被使用了。
注册Broadcast Receiver的方法
BroadcastReceiver能够监听被广播出来的对象,一般是会用Intent来进行广播。那么,达到能够监听的目的,则BroadcastReceiver必须进行注册。注册方法有两种:
在AndroidManifest.xml文件中进行注册:
这里面需要注意一点的是,如果我在AndroidManifest.xml文件中进行注册BroadcastReceiver的话,无论这个BroadcastReceiver所在的应用程序是运行状态还是关闭状态,这个BroadcastReceiver都是活动的,都可以接收到广播的事件。例如,短信息的接收,电池耗电量的显示等应用程序。我们在待机状态时需要监听这些状态,但是我们不可能一直打开应用程序。
在应用程序的代码中进行注册:
当我们需要更新Activity里面的控件的状态的时候,则需要在应用程序的代码中进行注册,这个时候我们如果在AndroidManifest.xml中注册的话就不太合适了。因为只有我们在Activity能看到的时候才进行更新,而Activity看不见的时候,这个BroadcastReceiver就应该关闭。否则会浪费各种资源。因此,这个时候就需要在应用程序的代码中进行注册。在Activity启动以后注册BroadcastReceiver,在Activity不可见后取消注册。
注册的代码很简单就是registerReceiver(receiver,filter);
相应的,取消注册的代码为unregisterReciver(receiver);
参数receiver表示一个BroadcastReceiver对象( TheBroadcastReceiver to handle the broadcast.);filter表示一个Intent-filter对象( Selectsthe Intent broadcasts to be received.),与我们在AndroidManifest.xml 文件中所使用的Intent-filter标签的作用是一样的。后面会讨论到如何创建一个Intent-filter对象。
下面用手机接收信息这个例子来说明。对应代码如下:
[java] view plaincopy
public class BroadcastReceiverTest extends Activity {
private Button myRegisterbtn;
private Button myUnregisterbtn;
private SMSReceiver myMessageReceiver;
private static final String SMS_ACTION = "android.provider.Telephony.SMS_RECEIVED";
private static final String EDIT_ACTION = "android.intent.action.EDIT";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
myRegisterbtn = (Button)findViewById(R.id.registerbtn);
myUnregisterbtn = (Button)findViewById(R.id.unregisterbtn);
myRegisterbtn.setOnClickListener(newmyRegisterListener());
myUnregisterbtn.setOnClickListener(newmyUnregisterListener());
}
class myRegisterListener implements OnClickListener{
@Override
public void onClick(View v) {
myMessageReceiver = new SMSReceiver();
//生成一个BroadReceiver对象
IntentFilter myFilter = new IntentFilter();
//生成一个IntentFilter对象
myFilter.addAction(SMS_ACTION);
//为IntentFilter添加一个Action
BroadcastReceiverTest.this.registerReceiver(myMessageReceiver, myFilter);
}
//整个操作完成了BroadcastReceiver的注册。
}
class myUnregisterListener implements OnClickListener{
@Override
public void onClick(View v) {
BroadcastReceiverTest.this.unregisterReceiver(myMessageReceiver);
//将BroadcastReceiver对象在系统中解除注册
}
}
}
代码很简单,就是定义了两个按钮,其中一个是将BroadcastReceiver绑定到应用程序中,另一个则是解除BroadcastReceiver在应用程序中的绑定。相应的,我们还需要将接收器的类编写出来,为了方便测试,我们只在接收器类里编写一个打印输出,代码如下:
[java] view plaincopy
public class SMSReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
System.out.println("onReceivestart");
}
}
当然,我们这里是在应用程序中注册的BroadcastReceiver,所以就不用在AndroidManifest.xml文件中再去注册一次了。(读者可以尝试着仍然去AndroidManifest.xml文件中注册,看看会发送什么现象。)运行程序,并且点击注册按钮,然后利用DDMS来给模拟器发送一条短信。如图所示:
当我们点击完Send按钮后,查看控制台,则会发现“onReceive start”已经被打印出来了,如下图所示:
这就意味着,接收器在过滤到发送信息这样的事件后,接收到了广播。至此,BroadcastReceiver的两种注册方式就讲完了。
讲完这两种方式后,读者可能会有一系列疑问。那就是,为什么我这个action是android.provider.Telephony.SMS_RECEIVED的时候,发送一个消息,对应的接收器就能够接收到广播,如果我的action不是这个,那么发送的广播还会被接收吗?又该怎么样确定到底一个action对应什么操作?从而才能够被广播接收器接收到。Android系统中又多少内置的这种action?我们能不能自定义一个action?如果可以的话如何定义呢?
首先,我们来考察一下Android内置的Broadcast Actions。
Android内置的Broadcast Actions
在Android平台中,内置了很多Action,用于帮助开发者监听手机上所发生的各种事件。下面给出几个内置的BroadcastAction的例子:
android.intent.action.BATTERY_CHANGED
充电状态,或者电池的电量发生变化
android.intent.action.SCREEN_ON
屏幕已经被打开
android.intent.action.PACKAGE_REMOVED
设备上删除了一个应用程序包
android.intent.action.TIME_TICK
当前时间已经变化(正常的时间流逝)
如果要查询BroadcastAction的完整列表,可以在官方SDK的帮助文档里面找到Intent类,在常量定义的解释中,去找Broadcast Action开头的信息就可以了。例如我们找到String类型的常量:ACTION_BATTERY_LOW,后面的解释是以“Broadcast Action”开头的。
String ACTION_BATTERY_LOW Broadcast Action: Indicates low batterycondition on the device.
一般来说,Android操作系统给我们提供的内置的Broadcast Action是够用的,当然我们也可以进行自定义Broadcast的Action。
自定义Broadcast Action
自定义Broadcast Actions其实就是自定义一个字符串常量。然后将这个常量广播出去,接收的地方再接收这个常量就可以了。下面利用代码来说明自定义BroadcastAction,同时,这里还将BroadcastReceiver和负责广播的工程分开成两个工程来说明,对于不同工程之间的广播接收的处理方式。代码如下:
[java] view plaincopy
public class MyBroadcast extends Activity {
public static final String NEW_BROADCAST = "com.todd.NEW_BROADCAST";
/* 这个静态常量字符串可以自己随便定义,代表自定义的action*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button mybutton =(Button)findViewById(R.id.mybutton);
mybutton.setOnClickListener(newButton.OnClickListener() {
public void onClick(View v) {
Intent myIntent = new Intent(NEW_BROADCAST);
myIntent.putExtra("MSG", "地瓜地瓜,我是土豆!");
myIntent.setAction(NEW_BROADCAST);
sendBroadcast(myIntent);
}
});
}
}
XML文件中只需要定义一个按钮
[html] view plaincopy
<Button
android:id="@+id/mybutton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="发送广播"
/>
然后再建立一个工程,作为接收的工程,这个工程负责接收广播工程广播出来的数据。代码如下:
[java] view plaincopy
public class MyReceiver extends BroadcastReceiver {
/** Calledwhen the activity is first created. */
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generatedmethod stub
String message = intent.getExtras().getString("MSG");
Toast.makeText(context, message, Toast.LENGTH_LONG).show();
System.out.println(message);
}
}
到这里还不算完。需要有一个注册的过程。注册的过程,就是让接收工程知道我要接收来自哪一个Intent的数据。
在Androidmanifest.xml中注册如下:
[html] view plaincopy
<receiver android:name=".MyReceiver">
<intent-filter>
<action android:name="com.todd.NEW_BROADCAST" />
</intent-filter>
</receiver>
这样就把"com.todd.NEW_BROADCAST"动作注册到了接收工程中。如此,接收工程完毕。
但是这样就结束了吗?还没有。如果此时编译后,广播工程没有任何问题,但是接收工程会出错,classcast的错误。这是因为,我们在编译接收工程的时候,没有给接收工程一个Activity用于显示接收的信息。因此,我们需要定义一个Activity.代码如下:
[java] view plaincopy
public class IntentRes extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
当然,在相应的AndroidManifest.xml文件中要修改,写为:
[html] view plaincopy
<activity android:name=".IntentRes"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
至此,就完成了广播和接收。他们位于不同的工程中。
小结:
在Android 中如果要发送一个广播必须使用sendBroadCast 向系统发送对其感兴趣的广播接收器中。
使用广播必须要有一个intent 对象必设置其action动作对象
使用广播必须在配置文件中显式的指明该广播对象
每次接收广播都会重新生成一个接收广播的对象
在BroadCast 中尽量不要处理太多逻辑问题,建议复杂的逻辑交给Activity 或者 Service 去处理
在Android中,有一些操作完成以后,会发送广播,比如说发出一条短信,或打出一个电话,如果某个程序接收了这个广播,就会做相应的处理。这个广播跟我们传统意义中的电台广播有些相似之处。之所以叫做广播,就是因为它只负责“说”而不管你“听不听”,也就是不管你接收方如何处理。另外,广播可以被不只一个应用程序所接收,当然也可能不被任何应用程序所接收。
什么是Broadcast Receiver
BroadcastReceiver是Android应用程序中的第三个组件。Broadcast Reciver和事件处理机制类似,不同的是事件处理机制是应用程序组件级别的,比如一个按钮的OnClickListener事件,只能够在一个应用程序中处理。而广播事件处理机制是系统级别的,不同的应用程序都可以处理广播事件。
如何使用Broadcast Receiver
可以通过构建Intent对象,然后调用sendBroadcast()方法将广播发出。事件的接受是通过一个继承自BroadcastReceiver的类来实现的。继承后重写onReceiver()方法,在该方法中响应事件。当然不能忘记在AndroidManifest.xml文件中注册BroadcastReceiver。
一般继承自BroadcastReceiver的类,是我们根据自己的需求所自定义的。这个自定义的类的作用,就是用来处理android当中所发出的广播事件。也就是说,Android操作系统中发出的广播,由BroadcastReceiver这个类来接收。接收到以后,就会调用这个类中的onReceive()方法来进行处理。那么,在Android系统中,有很多的广播,如何才能确定,一个receiver负责接收什么类型的广播呢?对了。这就是要去书写AndroidManifest.xml文件。我们需要在AndroidManifest.xml里进行注册,将receiver注册到应用程序中。这个receiver应该接收什么类型的事件是由Intent-filter来决定的。
对于onReceive方法,一旦方法返回。系统就会认为对象已经被完成。从而不再是活动状态。
按照上述说明。简单的看一个例子,代码如下:
[java] view plaincopy
public class BroadcastReceiverTest extends Activity {
private Button myButton;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
myButton = (Button)findViewById(R.id.myButton);
myButton.setOnClickListener(newButton.OnClickListener(){
@Override
public void onClick(View v) {
Intent myIntent = new Intent();
myIntent.setAction(myIntent.ACTION_EDIT);
BroadcastReceiverTest.this.sendBroadcast(myIntent);//发送广播
}
});
}
}
需要编写BroadcastReceiver类,代码如下:
[java] view plaincopy
public class ReceiverTest extends BroadcastReceiver {
public ReceiverTest(){
System.out.println("ReceiverTest");
}
@Override
public void onReceive(Context arg0, Intent arg1) {
System.out.println("onReceive");
}
}
在AndroidManifest.xml中注册的代码如下:
[html] view plaincopy
<receiver
android:label="@string/app_name"
android:name=".ReceiverTest" >
<intent-filter >
<action android:name="android.intent.action.EDIT" />
</intent-filter>
</receiver>
编译完成之后,我们在控制台会得到如图所示的结果:
如果连续按两次按钮,则会出现两次。如图所示:
在上面的例子中,Intent的Action类型为ACTION_EDIT,而在AndroidManifest.xml中注册的receiver类型也是edit,<action android:name="android.intent.action.EDIT"/>
,这就表明这两个Action进行了匹配。即执行了sendBroadcast方法之后,类型为edit的receiver就可以进行接收了。类型匹配成功的话,才会生成receiver的对象,从而调用onReceiver方法。上文中已经谈到,每次接收广播都会生成一个新的receiver对象。在处理完毕之后,这个对象就不会再被使用了。
注册Broadcast Receiver的方法
BroadcastReceiver能够监听被广播出来的对象,一般是会用Intent来进行广播。那么,达到能够监听的目的,则BroadcastReceiver必须进行注册。注册方法有两种:
在AndroidManifest.xml文件中进行注册:
这里面需要注意一点的是,如果我在AndroidManifest.xml文件中进行注册BroadcastReceiver的话,无论这个BroadcastReceiver所在的应用程序是运行状态还是关闭状态,这个BroadcastReceiver都是活动的,都可以接收到广播的事件。例如,短信息的接收,电池耗电量的显示等应用程序。我们在待机状态时需要监听这些状态,但是我们不可能一直打开应用程序。
在应用程序的代码中进行注册:
当我们需要更新Activity里面的控件的状态的时候,则需要在应用程序的代码中进行注册,这个时候我们如果在AndroidManifest.xml中注册的话就不太合适了。因为只有我们在Activity能看到的时候才进行更新,而Activity看不见的时候,这个BroadcastReceiver就应该关闭。否则会浪费各种资源。因此,这个时候就需要在应用程序的代码中进行注册。在Activity启动以后注册BroadcastReceiver,在Activity不可见后取消注册。
注册的代码很简单就是registerReceiver(receiver,filter);
相应的,取消注册的代码为unregisterReciver(receiver);
参数receiver表示一个BroadcastReceiver对象( TheBroadcastReceiver to handle the broadcast.);filter表示一个Intent-filter对象( Selectsthe Intent broadcasts to be received.),与我们在AndroidManifest.xml 文件中所使用的Intent-filter标签的作用是一样的。后面会讨论到如何创建一个Intent-filter对象。
下面用手机接收信息这个例子来说明。对应代码如下:
[java] view plaincopy
public class BroadcastReceiverTest extends Activity {
private Button myRegisterbtn;
private Button myUnregisterbtn;
private SMSReceiver myMessageReceiver;
private static final String SMS_ACTION = "android.provider.Telephony.SMS_RECEIVED";
private static final String EDIT_ACTION = "android.intent.action.EDIT";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
myRegisterbtn = (Button)findViewById(R.id.registerbtn);
myUnregisterbtn = (Button)findViewById(R.id.unregisterbtn);
myRegisterbtn.setOnClickListener(newmyRegisterListener());
myUnregisterbtn.setOnClickListener(newmyUnregisterListener());
}
class myRegisterListener implements OnClickListener{
@Override
public void onClick(View v) {
myMessageReceiver = new SMSReceiver();
//生成一个BroadReceiver对象
IntentFilter myFilter = new IntentFilter();
//生成一个IntentFilter对象
myFilter.addAction(SMS_ACTION);
//为IntentFilter添加一个Action
BroadcastReceiverTest.this.registerReceiver(myMessageReceiver, myFilter);
}
//整个操作完成了BroadcastReceiver的注册。
}
class myUnregisterListener implements OnClickListener{
@Override
public void onClick(View v) {
BroadcastReceiverTest.this.unregisterReceiver(myMessageReceiver);
//将BroadcastReceiver对象在系统中解除注册
}
}
}
代码很简单,就是定义了两个按钮,其中一个是将BroadcastReceiver绑定到应用程序中,另一个则是解除BroadcastReceiver在应用程序中的绑定。相应的,我们还需要将接收器的类编写出来,为了方便测试,我们只在接收器类里编写一个打印输出,代码如下:
[java] view plaincopy
public class SMSReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
System.out.println("onReceivestart");
}
}
当然,我们这里是在应用程序中注册的BroadcastReceiver,所以就不用在AndroidManifest.xml文件中再去注册一次了。(读者可以尝试着仍然去AndroidManifest.xml文件中注册,看看会发送什么现象。)运行程序,并且点击注册按钮,然后利用DDMS来给模拟器发送一条短信。如图所示:
当我们点击完Send按钮后,查看控制台,则会发现“onReceive start”已经被打印出来了,如下图所示:
这就意味着,接收器在过滤到发送信息这样的事件后,接收到了广播。至此,BroadcastReceiver的两种注册方式就讲完了。
讲完这两种方式后,读者可能会有一系列疑问。那就是,为什么我这个action是android.provider.Telephony.SMS_RECEIVED的时候,发送一个消息,对应的接收器就能够接收到广播,如果我的action不是这个,那么发送的广播还会被接收吗?又该怎么样确定到底一个action对应什么操作?从而才能够被广播接收器接收到。Android系统中又多少内置的这种action?我们能不能自定义一个action?如果可以的话如何定义呢?
首先,我们来考察一下Android内置的Broadcast Actions。
Android内置的Broadcast Actions
在Android平台中,内置了很多Action,用于帮助开发者监听手机上所发生的各种事件。下面给出几个内置的BroadcastAction的例子:
android.intent.action.BATTERY_CHANGED
充电状态,或者电池的电量发生变化
android.intent.action.SCREEN_ON
屏幕已经被打开
android.intent.action.PACKAGE_REMOVED
设备上删除了一个应用程序包
android.intent.action.TIME_TICK
当前时间已经变化(正常的时间流逝)
如果要查询BroadcastAction的完整列表,可以在官方SDK的帮助文档里面找到Intent类,在常量定义的解释中,去找Broadcast Action开头的信息就可以了。例如我们找到String类型的常量:ACTION_BATTERY_LOW,后面的解释是以“Broadcast Action”开头的。
String ACTION_BATTERY_LOW Broadcast Action: Indicates low batterycondition on the device.
一般来说,Android操作系统给我们提供的内置的Broadcast Action是够用的,当然我们也可以进行自定义Broadcast的Action。
自定义Broadcast Action
自定义Broadcast Actions其实就是自定义一个字符串常量。然后将这个常量广播出去,接收的地方再接收这个常量就可以了。下面利用代码来说明自定义BroadcastAction,同时,这里还将BroadcastReceiver和负责广播的工程分开成两个工程来说明,对于不同工程之间的广播接收的处理方式。代码如下:
[java] view plaincopy
public class MyBroadcast extends Activity {
public static final String NEW_BROADCAST = "com.todd.NEW_BROADCAST";
/* 这个静态常量字符串可以自己随便定义,代表自定义的action*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button mybutton =(Button)findViewById(R.id.mybutton);
mybutton.setOnClickListener(newButton.OnClickListener() {
public void onClick(View v) {
Intent myIntent = new Intent(NEW_BROADCAST);
myIntent.putExtra("MSG", "地瓜地瓜,我是土豆!");
myIntent.setAction(NEW_BROADCAST);
sendBroadcast(myIntent);
}
});
}
}
XML文件中只需要定义一个按钮
[html] view plaincopy
<Button
android:id="@+id/mybutton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="发送广播"
/>
然后再建立一个工程,作为接收的工程,这个工程负责接收广播工程广播出来的数据。代码如下:
[java] view plaincopy
public class MyReceiver extends BroadcastReceiver {
/** Calledwhen the activity is first created. */
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generatedmethod stub
String message = intent.getExtras().getString("MSG");
Toast.makeText(context, message, Toast.LENGTH_LONG).show();
System.out.println(message);
}
}
到这里还不算完。需要有一个注册的过程。注册的过程,就是让接收工程知道我要接收来自哪一个Intent的数据。
在Androidmanifest.xml中注册如下:
[html] view plaincopy
<receiver android:name=".MyReceiver">
<intent-filter>
<action android:name="com.todd.NEW_BROADCAST" />
</intent-filter>
</receiver>
这样就把"com.todd.NEW_BROADCAST"动作注册到了接收工程中。如此,接收工程完毕。
但是这样就结束了吗?还没有。如果此时编译后,广播工程没有任何问题,但是接收工程会出错,classcast的错误。这是因为,我们在编译接收工程的时候,没有给接收工程一个Activity用于显示接收的信息。因此,我们需要定义一个Activity.代码如下:
[java] view plaincopy
public class IntentRes extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
当然,在相应的AndroidManifest.xml文件中要修改,写为:
[html] view plaincopy
<activity android:name=".IntentRes"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
至此,就完成了广播和接收。他们位于不同的工程中。
小结:
在Android 中如果要发送一个广播必须使用sendBroadCast 向系统发送对其感兴趣的广播接收器中。
使用广播必须要有一个intent 对象必设置其action动作对象
使用广播必须在配置文件中显式的指明该广播对象
每次接收广播都会重新生成一个接收广播的对象
在BroadCast 中尽量不要处理太多逻辑问题,建议复杂的逻辑交给Activity 或者 Service 去处理
发表评论
-
for,foreach,iterator的用法和区别
2015-01-05 23:06 1077相同点: 三个都可以用来遍历数组和集合 不同点:1.形式差 ... -
Android网络开发之实时获取最新数据
2014-12-14 16:13 883在实际开发中更多的是需要我们实时获取最新数据,比如道路流量、实 ... -
底部菜单栏之Fragment的详细介绍和使用方法
2014-11-21 00:18 926底部菜单栏之Fragment的详细介绍和使用方法 : http ... -
Android--添加子视图(addView和setView)
2014-10-24 01:57 2069我们在添加视图文件的时候有两种方式,一种是通过在xml文件定义 ... -
Android 启动Launcher的说明
2014-10-24 01:26 858LauncherApplication->onCreat ... -
android动态布局方法总结
2014-09-19 00:21 749//绝对布局 AbsoluteLayout abslayout ... -
android回调函数总结
2014-08-28 00:12 840android回调函数总结 回调函数就是那些自己写的,但是不 ... -
修改设置Android Preference相关样式
2014-08-14 00:51 4601使用google默认的PreferenceActiivty实现 ... -
Android PrefeneceActivity知识小结
2014-08-14 00:49 7771.PrefeneceActivity都提供了哪几种元素可供使 ... -
安卓cpu超频降频
2014-08-05 00:49 9711.Android获取系统cpu信息,内存,版本,电量等信息 ... -
ndroid进程间通信:使用AIDL
2014-07-24 00:17 683要进程间通信、需要AIDL(以及Binder),那么可以默认你 ... -
Android 系统及framework 概述
2014-06-27 22:41 766初次接触android的朋友,首先需要对android系 ... -
ubuntu下创建eclipse快捷方式
2014-05-15 23:21 984ubuntu下创建eclipse快捷方式 1、 sudo ... -
android之 IntentFilter 应用
2014-05-03 00:03 706当Intent在组件间传递时 ...
相关推荐
除此之外,《Android开发艺术探索》还深入探讨了服务(Service)、广播接收器(BroadcastReceiver)、多线程与异步处理(AsyncTask、Loader)等组件和机制,这些都是构建复杂应用必不可少的部分。同时,书中也对...
通过以上讲解,相信你对Android的广播机制有了更全面的理解。实际编程中,灵活运用广播机制能够实现许多实用功能,提升应用的交互性和响应性。希望这个简单的广播机制教程对你在学习Android的道路上有所帮助。
《李兴华Android开发实战经典》是一门深入探讨Android应用开发的课程,由知名讲师李兴华老师主讲。这门课程旨在帮助学员全面掌握Android应用的开发技能,从基础到高级,涵盖了一系列实践性强的知识点。课程资料包括...
这本书深入浅出地讲解了Android开发中的各种技术难点和最佳实践,旨在帮助开发者提升技能,提高开发效率。书中涵盖了许多关键知识点,包括但不限于: 1. **Activity生命周期**:Android应用的核心组件之一,理解其...
《Android开发实例大全》是王东华先生撰写的一本深入浅出的Android应用程序开发指南,旨在帮助开发者通过实例学习和掌握Android平台上的编程技术。这本书覆盖了从基础到高级的各种主题,包括用户界面设计、数据存储...
在Android开发领域,掌握最新的技术和最佳实践至关重要。这份"最新最全的Android开发笔记"涵盖了Android应用开发的各个方面,旨在帮助开发者提升技能,跟上快速发展的Android生态系统。 笔记首先介绍了Android开发...
《Android开发从入门到精通》是一本专门为Android编程新手量身打造的教程。这本书全面覆盖了Android开发的基础知识,旨在帮助读者快速掌握Android应用开发的核心技能。以下是对书中的主要知识点进行的详细解读: 1....
1. **Android开发从入门到精通**:这是一份全面的教程,涵盖了Android开发的基础到高级概念,包括环境配置、UI设计、Activity管理、Intent传递、服务(Service)、广播接收器(BroadcastReceiver)以及数据存储等。...
《Android开发艺术探索》是任玉刚撰写的一本深度探讨Android应用开发的著作,它深受开发者们的喜爱,因其深入浅出地介绍了Android平台的各种技术细节和实践经验。这本书旨在帮助开发者提升技能,解决实际开发中遇到...
1. **环境配置**:讲解如何安装和配置Android Studio,这是Android开发的主要集成开发环境(IDE),以及如何创建第一个“Hello, World!”项目。 2. **UI设计**:详细介绍XML布局文件的编写,包括各种布局管理器如...
《Android开发艺术探索》这本书是Android开发者们非常推崇的一本技术书籍,它深入浅出地讲解了Android开发的各种技术和实践。这份"《Android开发艺术探索》源码.zip"压缩包包含的是书中所有章节的源代码,这对于学习...
根据给定文件的信息,我们可以提炼出以下关于“名师讲坛:Android开发实战经典(PDF)”的相关知识点。 ### Android开发概述 Android操作系统是由Google公司主导开发的一款基于Linux内核的开源移动设备操作系统。自...
本教程将详细讲解如何设置Android开发环境,包括安装Android Studio集成开发环境、配置SDK(Software Development Kit)以及模拟器或真机调试环境。 在Android应用程序结构方面,教程会讲解基本的项目结构,如...
操作系统Android开发应用实战练习讲解 在移动设备领域,Android操作系统占据着主导地位,为开发者提供了丰富的平台来构建各种应用程序。Android是由Google主导开发的开源操作系统,基于Linux内核,为智能手机、平板...
这部分内容将帮助初学者理解Android开发的起点和基本工具。 "Android UI开发"是学习的重点,因为它直接影响到应用的用户体验。Android提供了丰富的UI组件,如TextView、Button、ImageView等,以及布局管理器如...
首先,Android开发的核心是Java语言,因此教程可能会从Java基础开始讲解,包括数据类型、控制流程、类与对象等。对于没有编程背景的人来说,这是入门的必经之路。在Java基础知识扎实后,会进一步介绍Android SDK...
《Android开发权威指南》是李宁主编的一本深入解析Android应用程序开发的专业书籍,它涵盖了从基础知识到高级技术的广泛内容,旨在帮助读者全面理解和掌握Android开发的各项技能。书中的源代码都包含在这个压缩包中...
6. **意图(Intent)机制**:讲解Intent如何在不同组件间传递数据,启动Activity或Service,以及广播接收器(BroadcastReceiver)的使用。 7. **服务(Service)**:讨论后台运行的服务,包括如何启动、停止服务,...
1. **Chapter 01** - 通常会介绍Android开发环境的搭建,包括安装Android Studio、配置SDK、创建第一个Hello World项目,以及Android应用程序的基本结构和组件。 2. **Chapter 02** - 可能会讲解Android用户界面...