Intent:
1.开启一个Activity
页面跳转:(启动其他Activity)
Button button = (Button) findViewById(R.id.btn1);
button.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this,MyActivity.class);
startActivity(intent);
}
});
}
ComponentName属性:
Intent intent = new Intent();
ComponentName componentname = new ComponentName("com.aynu","com.aynu.MyActivity")
intent.setComponent(componentname);
startActivity(intent);
2.开启一个Service
3.用来传递广播
Action和Data属性:
ACTION_EDIT 对应data属性为: content//com.android.contacts/contacts/1
ACTION_CALL 对应data属性为:tel:10086
ACTION_VIEW http://www.xxxx.com
简单的按钮跳转:
Action属性和Category属性:
CateGory属性中intent.CATEGORY_HOME 和finish方法都可以返回到主屏幕,两者有什么区别???
Category:Category属性用于指定当前动作(Action)被执行的环境。通过addCategory()方法或在清单文件AndroidManifest.xml中设置。默认为:CATEGORY_DEFAULT。
Extras:Extras属性主要用于传递目标组件所需要的额外的数据。通过putExtras()方法设置。
通常我们使用Intent来直接传递Bundle对象,但也可以传递其他系统内置的一些参数。
BroadcastReceiver(广播接收者)
一:广播类型:
标准广播:完全异步执行的广播,发出广播后,所有广播接收器几乎会在同一时刻收到这条广播通知
有序广播:同步执行的一种广播,发出广播后,同一时间只有一个广播接收者能收到,当这个广播接收者的逻辑执行完毕后,才会传到下一个接收者,当然,前面的接收者还可以截断广播的继续传递,那么后续接收者就无法收到广播了
二:两种广播的注册方式:
动态注册:就是在Java代码中指定IntentFilter,然后添加不同的Action即可,想监听什么广播就写什么Action,另外动态注册的广播,一定要调用unregisterReceiver让广播取消注册
1.创建Servicer类
2.MainActivity中注册动态广播
静态注册:动态注册需程序启动后才能接收广播,经阿嚏广播就弥补了这个短板,在AndroidManifest中指定<IntentReceiver>就可以让程序在未启动的情况下接收到广播了
1.创建receiver类
2.在AndroidManifest.xml中对该Receiver进行注册,添加开机广播的intent-filter!
千万要加上加上android.permission.RECEIVE_BOOT_COMPLETED的权限
使用广播的注意事项:
不要在广播里添加过多逻辑或者进行任何耗时操作,因为在广播中是不允许开辟线程的, 当onReceiver( )方法运行较长时间(超过10秒)还没有结束的话,那么程序会报错(ANR), 广播更多的时候扮演的是一个打开其他组件的角色,比如启动Service,Notification提示, Activity等!
发送广播:
发送广播钱需要定义一个广播接收器,不然没有东西可接收,我们需要自定义一个BroadcastReceiver,重写onReceiver()方法,注册下,
1.标准广播:sendBroadcast(intent);即可
2.有序广播sendOrdereBroadcast(intent,null)
前面学习的都是全局广播,这意味着只要发送广播所有APP都会收到,不安全,所以为了应对,有了本地广播
本地广播:
核心用法:使用LocalBroadcastManager来管理广播
1.调用LocalBroadcastManagergetInstance()来获得实例
2.调用~.registerreceiver()注册广播
3.调用~.sendBroadcast()发送广播
4.调用~.unregisterReceiver()取消广播
注意事项:
1.无法通过静态注册方式来接收,相比起系统全局广播更高效
2.在广播中启动Activity的话,需要为Intent加入FLAG_ACTIVITY_NEW_TASK的标记,不然会报错,因为需要一个栈来存放新打开的Activity
3.广播中弹出AlertDialog的话,需要设置对话框的类型为:TYPE_SYSTEM_ALERT,不然是无法弹出的
ContentProvider(内容提供者)
概念:
当我们想允许自己的应用的数据允许别的应用进行读取操作,我们可以让我们的APP实现ContentProvider类,同时注册一个URL,然后其他应用只要使用ContentResolver根据URL就可以操作我们APP中的数据了,而数据不一定是数据库,也可能是文件,xml或者其他,但是SharePreferernce使用基于数据库模型的简单表格来提供其中的数据。
1.简单的读取收件箱的信息:
其中:
ContentResolver resolver = getContentResolver();
//对ContentProvider中的数据进行添加,删除,修改和查询操作
Uri uri = Uri.parse();//将字符串转换成URI
Cursor cursor = resolver.query();//获取信息
其中:
ContentResolver resolver = getContentResolver();
//对ContentProvider中的数据进行添加,删除,修改和查询操作
Uri uri = Uri.parse();//将字符串转换成URI
Cursor cursor = resolver.query();//获取信息