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常用动作
    image.png

  • 设置子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发送广播消息

  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();
    
     }

    我的疑惑解答

  3. super:用java术语来讲,被继承的类称为超类或父类,继承的类称为子类。

要掌握的知识点
image.png


自由自在像小鸟
4 声望1 粉丝