五、广播
1.标准广播(Normal)---异步执行,各接收器同时收到,无法截断
有序广播(Ordered)--同步执行,有先后顺序,优先级高的可以截断
2.动态建立broadcasts receiver :
新建类继承BroadcastReceiver 并重写onReceiver()方法。
PS:动态注册的广播接收器一定要取消注册
3.发送广播
发送标准广播流程:
定义广播接收器,新建类继承BroadcastReceiver,并在AndroidManifest.xml中进行注册:
<application
……
<receiver android:name=".MyBroadcastReceiver">
<intent-filter >
<action android:name="com.example.broadcasttest.MY_BROADCAST"/>
</intent-filter>
</receiver>
</application>
com.example.broadcasttest.MY_BROADCAST是广播的值,可以在布局中设置按钮,然后修改MainActivity.java 设置按钮点击事件,在onClik()方法中加入:
Intent intent = new Intent("com.example.broadcasttest.MY_BROADCAST");
sendBroadcast(intent);
首先构建Intent对象,传入创博值,调用sendBroadcast(intent)方法发送消息,所有值一样的广播接收器都会收到消息。
发送有序广播流程:
sendBroadcast(intent) 方法改成 --> sendOrderedBroadcast(intent, receiverPermission) 方法,第一个参数是Intent,第二个参数是与权限有关的字符串
在注册时设定广播接受的优先级 android:priority:
<receiver android:name=".MyBroadcastReceiver">
<intent-filter android:priority="100">
<action android:name="com.example.broadcasttest.MY_BROADCAST"/>
</intent-filter>
</receiver>
然后可以在类中的 onReceive 用 abortBroadcast() 方法截断广播。
4.本地广播
为了提高安全性,使用本地广播,只能在应用程序内部传递,也只能接受本应用的广播。
流程跟动态广播类似。不过首先是通过LocalBroadcastManager.getInstance获得实例,然后注册时用localBroadcastManager.registerReceiver,发送用localBroadcastManager.sendBroadcast(intent);
PS:本地广播是无法通过静态注册的。
5.实例
在编辑书里的实例的时候,自己打了一遍代码,编译是没错的,但是真机或者模拟器Run的时候就报错,出现这样的错误:
ViewServerDevice]Unable to debug device:
hierarchyviewer]Missing forwarded port for
hierarchyviewer]Unable to get the focused window from device
分析这个错误报告,怀疑是找不到视图的焦点,开始百度并检查错误,终于发现是一个小地方打错了:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.id.login); //导致错误的原因
setContentView(R.layout.login);
…………
哈哈略坑,但是自己找出问题并解决的感觉还是挺爽的~这是在AndroidManifest.xml里注册的主活动的onCreate方法,在这里需要加载布局,如果布局文件路径错的话当然加载不了,也聚焦不了啦。
6.版本控制工具Git
首先当然是下载,我是Windows坏境,下载地址为点击打开链接
个人感觉科学上网以后github速度会快许多,推荐shadowshocks 我用过来HK的服务器最顺。
到项目路径下建立一个代码仓库(Repository)
$git init
在项目根目录下生成一个隐藏的.git文件夹。
提交本地代码,add把想提交的代码添加进来,然后commit执行提交操作
$git add .
点表示添加全部文件,也可以单个文件或文件夹
$git commit -m "name."
-m必须要有。