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)
:明确指定要启动的组件,通常用于启动一个特定的 Activity 或 ServiceIntent intent = new Intent(); intent.setComponent(new ComponentName("com.example", "com.example.MyActivity")); startActivity(intent);
-
参数解析:
- component:目标组件的完整名称,包括包名和类名
-
ComponentName("com.example", "com.example.MyActivity")
:用于明确指定要启动的 Activity、Service 或 BroadcastReceiver,确保 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 表示没有特定权限要求
- 参数解析:
总结
- Intent 在Android中充当了不同应用组件之间的信息传递者,让用户能够轻松地启动新页面、后台服务或发送系统广播