Android—Intent没理解的看过来
Intent是Android应用的一个核心知识点,Intent对象负责对Activity、Service、Broadcast Receiver进行激活、跳转等,是“一名”优秀的信使
。
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);
本文地址:https://blog.csdn.net/weixin_44758662/article/details/107526569
上一篇: NB-IoT窄带物联网技术的四大优势
下一篇: Binder(2)
推荐阅读
-
Android中使用Intent在Activity之间传递对象(使用Serializable或者Parcelable)的方法
-
谈谈对Android View事件分发机制的理解
-
深入理解Android中的Window和WindowManager
-
Android编程使用Intent传递对象的方法分析
-
Android 中ThreadLocal的深入理解
-
Android MeasureSpec的理解和源码的解析
-
Android Intent调用 Uri的方法总结
-
Android使用Intent启动其他非系统应用程序的方法
-
详解Android中Intent的使用方法
-
Android Intent封装的实例详解