Android开发 - Intent类的信息传递与使用解析

Intent 是什么

  • Intent 就像是一张信件,它能带着信息去找指定的“收件人”。在Android中,这个“收件人”可以是应用中的其他活动(Activity)服务(Service)、或者广播接收器(Broadcast Receiver)

Intent 主要用途

启动活动

  • 在一个应用的主页上点击了一个按钮,你希望跳转到应用的另一个页面(活动)。你可以使用Intent来实现这个跳转

  • 代码示例

    Intent intent = new Intent(CurrentActivity.this, NextActivity.class);
    startActivity(intent);
    

启动服务

  • 后台播放音乐或执行某些长时间运行的任务。你可以使用Intent来启动一个服务

  • 代码示例

    Intent intent = new Intent(CurrentActivity.this, MyService.class);
    startService(intent);
    

发送广播

  • 你想要在应用内部或其他应用之间传递信息,比如电池电量低的警告。你可以使用Intent发送一个广播

  • 代码示例

    Intent intent = new Intent("com.example.broadcast.MY_NOTIFICATION");
    intent.putExtra("data_key", "some_data"); //键值对
    sendBroadcast(intent);
    

Intent 的类型

显式 Intent

  • 直接指定要启动的组件(例如,某个具体的活动或服务)

  • 代码示例

    Intent intent = new Intent(CurrentActivity.this, TargetActivity.class);
    

隐式 Intent

  • 不指定具体的组件,而是通过指定动作(Action)数据(Data)来让系统决定哪个组件可以处理这个请求

  • 代码示例

    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setData(Uri.parse("http://www.example.com"));
    

Intent 额外的作用

  • Intent 还可以携带额外的数据,这些数据是通过“附加信息”来传递的,其他组件可以通过这些数据来完成特定的操作

  • 代码示例

    Intent intent = new Intent(CurrentActivity.this, NextActivity.class);
    intent.putExtra("extra_key", "extra_value"); //键值对
    startActivity(intent);
    

如何接收 Intent

  • 在活动中通过 getIntent() 方法来获取传递过来的Intent,然后提取附加数据

  • 代码示例

    Intent intent = getIntent();
    String value = intent.getStringExtra("extra_key");	//以键取值
    

Intent 的主要方法汇总及解析

  • intent.putExtra(String name, String value):将额外的数据附加到 Intent 中,以便在目标 Activity 或 Service 中使用这些数据

    Intent intent = new Intent(this, NextActivity.class);
    intent.putExtra("KEY_NAME", "John Doe");
    startActivity(intent);
    
    • 参数解析
      • name额外数据的键,比如 "KEY_NAME"
      • value额外数据的值,比如 "John Doe"
  • intent.getStringExtra(String name):从 Intent 中提取之前设置的字符串数据

    Intent intent = getIntent();
    String name = intent.getStringExtra("KEY_NAME");
    

    参数解析

    • name:要获取的额外数据的键,比如 "KEY_NAME"
  • intent.getIntExtra(String name, int defaultValue):从 Intent 中提取之前设置的整数数据,若未找到则返回默认值

    Intent intent = getIntent();
    int age = intent.getIntExtra("KEY_AGE", 30);
    
    • 参数解析
      • name:要获取的额外数据的键,比如 "KEY_AGE"
      • defaultValue:如果没有找到的数据,返回的默认值比如 30
  • intent.setAction(String action):设置 Intent执行的动作,如查看网页发送邮件

    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setData(Uri.parse("http://www.example.com"));
    startActivity(intent);
    
    • 参数解析
      • action:指定要执行的操作,比如 Intent.ACTION_VIEW 表示查看数据
  • intent.setData(Uri data):指定 Intent操作的数据,例如要查看的文件联系人的详细信息

    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setData(Uri.parse("content://contacts/people/1"));
    startActivity(intent);
    
    • 参数解析
    • data操作的数据,通常是 URI,例如联系人的内容 URI
  • intent.setComponent(ComponentName component):明确指定要启动的组件,通常用于启动一个特定的 ActivityService

    Intent intent = new Intent();
    intent.setComponent(new ComponentName("com.example", "com.example.MyActivity"));
    startActivity(intent);
    
    • 参数解析

      • component目标组件的完整名称,包括包名类名
    • ComponentName("com.example", "com.example.MyActivity"):用于明确指定启动的 ActivityServiceBroadcastReceiver确保 Intent 指向正确的组件

      • 参数解析

        • com.example:目标组件所在的应用程序的包名。这是应用的唯一标识符,用于定位应用程序

        • com.example.MyActivity:目标组件的完整类名,包括包名类名。在这个例子中,它指定了 MyActivity 这个 Activity 类,位于 com.example 包内

  • intent.setClass(Context packageContext, Class<?> cls)设置 Intent 要启动的 Activity,比 setComponent 更简便

    Intent intent = new Intent();
    intent.setClass(this, MyActivity.class);
    // 或者 Intent intent = new Intent(this, MyActivity.class);
    startActivity(intent);
    
    • 参数解析
      • packageContext:当前上下文,通常是 this
      • cls目标 Activity 的类,例如 MyActivity.class
  • startActivity(Intent intent):启动一个新的 Activity,根据 Intent 中的信息执行相关操作

    Intent intent = new Intent(this, NextActivity.class);
    startActivity(intent);
    
    • 参数解析
      • intent:包含操作数据Intent 对象
  • startService(Intent intent):启动一个后台服务进行长时间运行的操作,如下载文件处理数据

    Intent intent = new Intent(this, MyService.class);
    startService(intent);
    
    • 参数解析
      • intent启动服务的 Intent 对象
  • bindService(Intent intent, ServiceConnection conn, int flags)绑定到一个服务,以便可以在服务运行时与其进行交互

    Intent intent = new Intent(this, MyService.class);
    bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE);
    
    • 参数解析

      • intent启动服务的 Intent 对象

      • conn:用于与服务进行交互的回调接口

      • flags绑定选项,例如 Context.BIND_AUTO_CREATE,表示在需要时自动创建服务

  • sendBroadcast(Intent intent)发送一个广播,所有注册了相应动作的接收者将会收到这个广播

    Intent intent = new Intent("com.example.CUSTOM_ACTION");
    sendBroadcast(intent);
    
    • 参数解析
      • intent:包含广播信息Intent 对象
  • sendOrderedBroadcast(Intent intent, String receiverPermission):发送一个有序广播,广播会按照优先级传递给接收者,允许接收者在广播传递过程中进行干预

    Intent intent = new Intent("com.example.ORDERED_ACTION");
    sendOrderedBroadcast(intent, null);
    
    • 参数解析
      • intent:包含广播信息Intent 对象
      • receiverPermission接收者的权限,通常为 null 表示没有特定权限要求

总结

  • IntentAndroid中充当了不同应用组件之间的信息传递者,让用户能够轻松地启动新页面后台服务发送系统广播
posted @ 2024-08-12 11:12  阿俊学JAVA  阅读(65)  评论(0编辑  收藏  举报