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.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);
  • 设置子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);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发送播送音讯

  1. 创立一个intent
  2. 调用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(); }