android如何接收广播
① Android 第六讲 广播接收器和服务
两种方式:静态注册和动态注册
动态注册:
1)动态注册:需要定义一个继承自BroadcastReceiver类的子类,该接收器需要在Activity中的onDestroy中注销
2)静态注册:通过在AndroidManifest.xml中配置
两种广播形式:有序广播和无序广播
1)无序广播:接受标准广播的接收器将同时收到广播消息,异步执行,没有先后顺序 sendBroadCast
2)有序广播:sendOrderedBroadCast,按照一定顺序先后被接受顺序,由priority属性决定,abortBroadCast中断广播
如果只想在本应用中发送和接受广播,使用LocalBroadcastReceiver来对广播进行管理
本地广播不支持静态注册
优点 :安全高效
Service是Android中的一种组件,和Activity的级别一致,但不能自己运行,只能后台运行,和其他组件交互,服务必须注册才能使用
本地服务:服务依附在主线程中,节约资源,主线程死掉服务终止
远程服务:服务在独立进程中,灵活性好 ,占用资源高
两种服务的启动模式:
1)start方式:调用者和服务之间没有关联,调用者退出不会影响服务,startService启动服务,如果服务不存在,调用onCreat方法,然后onStartCommand被调用。stopService关闭服务,onDestroy方法被调用
2)bind方式:调用者和服务绑定,调用者退出,服务终止bindService启动服务,onCreate方法创建服务,onBind方法绑定服务,onUnbind方法解绑,onDestory在服务结束时调用
② 无收音机功能的安卓Android手机中怎么收听广播
今天,小编给大家分享在无收音机功能的安卓Android手机中收听广播的方法,希望对大家有所帮助。
具体如下:
1. 首先,请大家在自己的手机中完成“中国广播”App的下载和安装,然后点击打开这个App,来到它的主界面。
2. 第二步,我们来到如图所示的新界面,请大家选择其中的“电台”按钮。
3. 第三步,接下来,请大家选择新界面中的“本地台”选项。
4. 第四步,如图所示,屏幕中出现了这样的新界面,请大家根据自己所需选择一个需要添加到收藏中的电台,然后点一下它后面的❤即可。
5. 有的朋友是首次使用这个App,那么是要注册的,我们需要先来到登录界面,然后选择其中的“注册”选项。
6. 第六步,完成上一步后,请大家根据要求输入手机号,接着即可获取短信验证码,请输入验证码,再选择“下一步”就行了。
7.第七步,我们需要在新界面中输入用户昵称,接着输入密码以及身份证号,完成后请选择“提交注册”选项。
8. 第八步,我们需要在如图所示的“本地台”界面继续上面讲的第四步骤操作,这样就能将自己喜欢的电台添加到收藏中了。
9. 第九步,我们还可以选择一个电台然后进入它的播放界面,我们会在新界面中发现一个❤标志,这就表示我们已经收藏了该电台,我们还能点击屏幕右上方的“分享”把此电台分享给好友呢。
10. 最后,屏幕中出现了如图所示的新界面,请大家选择自己喜欢的分享方法,这样就能成功把电台分享出去。
③ 求高手 android开机广播 为什么在模拟器能接收到 在真机上却接收不到
看系统版本, 低于 3.1的版本, 无需载体 , 广播都能够 自动运行 。 3.1以及以后的版本 ,广播 需要有 Activity的支撑,并且运行程序后启动一次,重新开机才能够启动广播,就这点区别。
④ 注册广播有几种方式,这些方式有何优缺点请谈谈Android引入广播机制的用意。
android中,不同进程之间传递信息要用到广播,可以有两种方式来实现。
第一种方式:在Manifest.xml中注册广播,是一种比较推荐的方法,因为它不需要手动注销广播(如果广播未注销,程序退出时可能会出错)。
具体实现在Manifest的application中添加:上面两个android:name分别是广播名和广播的动作(这里的动作是表示系统启动完成),如果要自己发送一个广播,在代码中为:
Intent i = new Intent(“android.intent.action.BOOT_COMPLETED”);
sendBroadcast(i);
这样,广播就发出去了,然后是接收。
接收可以新建一个类,继承至BroadcastReceiver,也可以建一个BroadcastReceiver的实例,然后得写onReceive方法,实现如下:
protected BroadcastReceiver mEvtReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(“android.intent.action.BOOT_COMPLETED”)) {
//Do something
}
}
};
第二种方式,直接在代码中实现,但需要手动注册注销,实现如下:
IntentFilter filter = new IntentFilter();
filter.addAction(“android.intent.action.BOOT_COMPLETED”);
registerReceiver(mEvtReceiver, filter); //这时注册了一个recevier ,名为mEvtReceiver,然后同样用上面的方法以重写onReceiver,
最后在程序的onDestroy中要注销广播,实现如下:
@Override
public void onDestroy() {
super.onDestroy();
unregisterReceiver(mPlayerEvtReceiver);
}
⑤ android 广播自定义广播接收问题
其实没啥技术可言的,就是Android中可以自定义权限的,对于四大组件的访问加上一层保护,不多说了,直接上代码:
发送广播:
[java] view plain
package com.tt.test;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class Main extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
((Button)findViewById(R.id.button)).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent("COM.MESSAGE");
i.addCategory("receiver");
i.putExtra("message", "haha");
sendOrderedBroadcast(i, "xvtian.gai.receiver");
}
});
}
}
AndroidManifest.xml:
[html] view plain
<uses-permission android:name="xvtian.gai.receiver" ></uses-permission>
<permission android:protectionLevel="normal" android:name="xvtian.gai.receiver"></permission>
接收广播:
[java] view plain
package com.tt.receiver;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
public class Receiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("TAG", "receiver intent:" + intent.toString());
}
}
AndroidManifest.xml
[html] view plain
<uses-permission android:name="xvtian.gai.receiver" ></uses-permission>
[html] view plain
<receiver android:name=".Receiver" android:permission="xvtian.gai.receivers">
<intent-filter>
<action android:name="COM.MESSAGE" />
<category android:name="receiver" />
</intent-filter>
</receiver>