Intent 是一种消息传递机制,用于组件之间的数据交换和发送广播消息
应用程序有多个Activity,Intent可以实现不同Activity之间的切换和数据传递
显示启动
Intent intent = new Intent(IntentDemoActivity.this, NewActivity.class);
startActivity(intent);
隐式启动:降低组件之间的耦合度
用intent 启动一个网页
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("schemodemo://edu.hrbeu/path"));
startActivity(intent);
第一个参数是intent需要执行的动作
第二个参数是uri,表示要传递的数据
Intent.ACTION_VIEW是Intent的常用动作,以Uri方式传送数据
获取Activity的返回值
先启动的Activity称为父Activity
后启动的Activity称为子Activity
获取子Activity的返回值?
以Sub-Activity的方式启动子Activity
显示启动int SUBACTIVITY1 = 1; Intent intent = new Intent(ActivityCommunicationActivity.this, SubActivity1.class); startActivityForResult(intent, SUBACTIVITY1);
隐式启动
int SUBACTIVITY2 = 2; Uri uri=Uri.parse("content://contacts/people"); Intent intent = new Intent(Intent.ACTION_PICK,uri); startActivityForResult(intent, SUBACTIVITY2);
Intent常用动作
设置子Activity的返回值
在finish()之前调用setResult()函数返回数据给父Activity
第一个参数是状态码
第二个参数是返回值,它被封装在Intent中
调用Intent的putExtra()方法添加额外信息String uriString = editText.getText().toString(); Uri data = Uri.parse(uriString); Intent result = new Intent(null, data); result.putExtra("name","xyy"); setResult(RESULT_OK, result); //setResult(RESULT_CANCELED,null);表示没有数据要返回给父Activity; finish();
在父Activity中获取返回值
protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch(requestCode){ case SUBACTIVITY1: if (resultCode == RESULT_OK){ Uri uriData = data.getData(); textView.setText(uriData.toString()); } break; case SUBACTIVITY2: if (resultCode == RESULT_OK){ Uri uriData = data.getData(); } break; } }
Intent过滤器
它是根据Intent中的动作action,类别category,数据data等内容,对接受该Intent的组件进行匹配和筛选机制
<activity
android:label="@string/app_name"
android:name=".WebViewIntentDemoActivity" >
<intent-filter >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".NewActivity" android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="schemodemo" android:host="edu.hrbeu" />
</intent-filter>
</activity>
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("schemodemo://edu.hrbeu/path"));
startActivity(intent);
广播消息
用Intent发送广播消息
- 创建一个intent
调用sendBroadcast()函数
Intent intent = new Intent("edu.hrbeu.BroadcastReceiverDemo"); intent.putExtra("message", entryText.getText().toString()); sendBroadcast(intent);
监听广播消息用BroadcastReceiver
声明BroadcastReceiver可以接收的广播消息类型<receiver android:name=".MyBroadcastReceiver"> <intent-filter> <action android:name="edu.hrbeu.BroadcastReceiverDemo" /> </intent-filter> </receiver>
public class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String msg = intent.getStringExtra("message"); Toast.makeText(context, msg, Toast.LENGTH_SHORT).show(); }
我的疑惑解答
- super:用java术语来讲,被继承的类称为超类或父类,继承的类称为子类。
要掌握的知识点
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。