Intent是Android应用的一个核心知识点,Intent对象负责对Activity、Service、Broadcast Receiver进行激活、跳转等,是“一名”优秀的信使

Intent对象的属性

  • Conponent Name(组件名称)
  • Action(动作)
  • Data(数据)
  • Category(种类)
  • Extras(额外)
  • Flags(标记)

Conponent Name(组件名称)

Conponent Name(组件名称)是用来设置Intent对象目标组件名称的,通过设置Conponent Name可以启动其他的Activity等,可以使用以下提供的方法进行设置

setComponent(ComponentName component)setClass(Context packageContext,  Class<?> cls)setClassName(String packageName, String className)setClassName(Context packageContext, String className)

例子:首先在MainActivity的布局文件中加入一个按钮组件,之后在该MainActivity类中获取该按钮,之后为其设置点击的监听,一旦点击就跳转到自己创建的名为sure_Activity的Activity,主要使用ConponentName与setComponent()实现

主要代码:

Button sure=findViewById(R.id.sure);sure.setOnClickListener(new View.OnClickListener() {    @Override    public void onClick(View view) {        Intent intent = new Intent();        //第一个参数是应用的包名,第二个参数是类名,需要包括其完整包名        ComponentName name = new ComponentName("com.example.myapplication","com.example.myapplication.sure_Activity");        intent.setComponent(name);        startActivity(intent);                 //startActivity()方法开启Activity    }});

Action(动作)

Action用来表示想要执行的动作,但在广播Intent中,Action用来表示已经发生即将报告的动作,Action通常与Date、Category共同使用

在Intent类中已经为我们定义好了一系列的动作,如:打电话ACTION_CALL发短信ACTION_SEND(它们都是常量),极大的方便了开发人员的使用,下面简单例举一些常用的Action常量,需要完整的Action常量,可自行查看API

常量 功能
ACTION_CALL 使用提供的数据给某人打电话
ACTION_SEND 向某人发送信息,接收者未指定
ACTION_ANSWER 接听电话
ACTION_EDIT 将数据显示给用户用于编辑
ACTION_VIEW 将数据显示给用户
ACTION_TIME_TICK 每分钟通知一次当前时间改变
ACTION_POWER_CONNECTED 通知设备已经连接外置电源
ACTION_SHUTDOWN 通知设备已经被关闭

通常使用setAction()方法进行设置

Data(数据)

Data表示操作数据的URI和MIME类型。需要与前面的Action(动作)一同使用,不同的Action(动作)需要匹配对应的Data

MIME type是指:数据的类型,如mp4
通常使用setType()方法进行设置

URI是一个用于标识某一资源名称的字符串
通常使用setData()方法进行设置

setDataAndType()方法可以同时设置URI和MIME type

例子:通过点击按钮进行打电话、通过点击按钮访问CSDN官网
注:打电话、发短信等需要开启权限

<uses-permission android:name="android.permission.CALL_PHONE"/><uses-permission android:name="android.permission.SEND_SMS"/>

可能还需在手机中允许该APP使用打电话、发短信等功能

主要代码:

 Button call=findViewById(R.id.call); Button csdn=findViewById(R.id.CSDN);call.setOnClickListener(new View.OnClickListener() {     @Override     public void onClick(View view) {         Intent intent = new Intent();         intent.setAction(Intent.ACTION_CALL);   //设置打电话的Action         intent.setData(Uri.parse("tel:10086")); //设置数据         startActivity(intent);     } });csdn.setOnClickListener(new View.OnClickListener() {    @Override    public void onClick(View view) {        Intent intent = new Intent();        intent.setAction(Intent.ACTION_VIEW);        intent.setData(Uri.parse("https://www.csdn.net/"));        startActivity(intent);    }});

Category(种类)

Category(种类)是指被执行动作的附加信息,如CATEGORY _LAUNCHER表示设置该组件为在当前应用程序启动器中优先级最高的Activity
常用常量

常量 功能
CATEGORY_DEFAULT 按照默认方式执行
CATEGORY_HOME 设置为Home Activity
CATEGORY _LAUNCHER 设置优先级最高的Activity
CATEGORY_BROWSABLE 设置可以使用浏览器启动
CATEGORY_APP_MARKET 允许用户浏览和下载新应用

Extras(额外)

Extras是用于传递信息的

通常通过putXXX(“键”,值)、getXXX(“键”)方法进行传递和获取信息,键其实就是为其命名,值就是你要传递的值

例子:
传递的MainActivity

  final EditText editText1=findViewById(R.id.et1);        final EditText editText2=findViewById(R.id.et2);        Button login=findViewById(R.id.LOGIN);        login.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                String username=editText1.getText().toString();                String passeword=editText2.getText().toString();                Intent intent = new Intent(MainActivity.this,result.class);                intent.putExtra("username",username);                intent.putExtra("password",passeword);                startActivity(intent);            }        });    }}

接收的result Activity

Intent intent=getIntent();String str1=intent.getStringExtra("username");String str2=intent.getStringExtra("password");Toast.makeText(result.this, "用户名为:"+str1+",密码为:"+str2, Toast.LENGTH_SHORT).show();

Flags(标记)

Flags(标记)主要用于指示Android如何启动目标Activity的,以及启动后如何对待该Activity
Task是以栈的模式聚集在一起的Activity
常用方法

setFlags()addFlags()

常用常量:

常量 功能
FLAG_ACTIVITY_CLEAR_TOP 如果在栈中已经有该Activity的实例,就重用该实例。重用时,会让该实例回到栈顶,因此在它上面的实例将会被移除栈。如果栈中不存在该实例,将会创建新的实例放入栈中。
FLAGE_ACTIVITY_SINGLE_TOP 如果在任务的栈顶正好存在该Activity的实例, 就重用该实例,而不会创建新的Activity对象。
FLAG_ACTIVITY_NO_HISTORY 当离开该Activity后,该Activity将被从任务栈中移除

显式Intent、隐式Intent
最后介绍以下显式Intent和隐式Intent

显式Intent 指定目标组件的名称,多用于应用程序内部传递信息如:   Intent intent = new Intent(MainActivity.this,result.class); //启动一个名为result的Activity
隐式Intent 不指定目标组件的名称,而是定义要执行的action、category和data,Android会去匹配目标组件,多用于不同应用程序之间传递信息如:   Intent intent = new Intent();        intent.setAction(Intent.ACTION_VIEW);        intent.setData(Uri.parse("https://www.csdn.net/"));        startActivity(intent);

更多相关文章

  1. AndroidKotLin系列--Android(安卓)Studio 第一步使用KotLin
  2. Android(安卓)自定义时间轴
  3. android之两种设置全屏或者无标题的方法
  4. Android组件----1.文本TextView详解
  5. 【Android】 ImageView.ScaleType设置图解
  6. Android——RecyclerView根据不同的item设置不同的背景颜色
  7. 一步一步学android之事件篇——长按事件
  8. android studio 中的编码问题
  9. Android(安卓)Sqlite synchronous设置

随机推荐

  1. Android(安卓)UI控件详解-RadioGroup和Ra
  2. Android设置系统时间
  3. Android(安卓)debuggerd
  4. Talking about Android(安卓)Process
  5. Android(安卓)View源码解析
  6. android的单选框例子
  7. Android(安卓)Studio 生成UML类图
  8. android 自定义具有反弹效果的ScrollView
  9. Android使用wifi Ap核心类
  10. Android(安卓)webview加载网页