1. Activity之间传值
a. MainActivity传值给OtherActivity
Intent intent = new Intent(this, ResultActivity.class);
intent.putExtra("name", name);
startActivity(intent);
-------------------------------------------------------------------
Intent intent = getIntent(); //获得开启它的Activity的intent
Bundle bundle = intent.getExtras();
String name = (String)bundle.get("name");
b. MainActivity获得OtherActivity的值
//开启一个新的activity,并获取这个activity结束后返回的result
startActivityForResult(intent, 0); // 参数0表示的是requestcode,指定是哪个控件发出的请求
//当新开启的activity关闭时调用的方法
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){}
//传递数据给调用它的activity
Intent data = new Intent();
data.putExtra("number", number);
setResult(0, data);
// 调用这个方法会关闭当前的activity,然后传递数据给调用者 调用者再执行onActivityResult获得数据
finish();
2. Broadcast Receiver
无序广播:所有广播接收者都会收到发送的广播事件
有序广播:广播接收者按照优先级接收到广播事件,其特点是高优先级的广播接收者可以终止广播事件
指定广播: 显式指定广播接收者,外拨电话调用这个func后,abortBroadcast不能终止这个广播;
广播事件的流程:
① 注册广播事件:注册方式有两种,一种是静态注册,就是在AndroidManifest.xml文件中定义,注册的广播接收器必须要继承BroadcastReceiver;另一种是动态注册,是在程序中使用Context.registerReceiver注册,注册的广播接收器相当于一个匿名类。两种方式都需要IntentFIlter。
② 发送广播事件:通过Context.sendBroadcast来发送,由Intent来传递注册时用到的Action。
③ 接收广播事件:当发送的广播被接收器监听到后,会调用它的onReceive()方法,并将包含消息的Intent对象传给它。onReceive中代码的执行时间不要超过5s,否则Android会弹出超时dialog。
- abortBroadcast()失败的原因可能是权限太低,被权限高的应用把广播拦截了
- 广播来短信的应用没有执行onReceive方法的问题: 版本的原因
① 如果创建了Activity,在2.3和4.0以上版本都可以
② 如果没有创建Activity,2.3版本可以,4.0以上版本需要用户主动开启broadcast,可以创建一个透明的窗体
③ 获取短信数据库的方法