博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Intent(意图)
阅读量:7210 次
发布时间:2019-06-29

本文共 3371 字,大约阅读时间需要 11 分钟。

Intent 意图

显式意图

在构造Intent对象的时候就指定接受者。通常用于本程序之间。

Demo

我们最常见一个显示意图就是我们的应用程序Activity之间的跳转

public void click(View v){    ntent  intent = new Intent(this,TestActivity.class);    this.startActivity(intent);}

隐式意图

在构造的Intent时候我们可能并不知道或者不关心接受者时候是谁,而是通过一组特定的筛选条件来由系统自动筛选符合条件的Intent接受者。这个方式叫作隐式意图,我们经常在跨程序传输数据的时候用到。

Demo

我们所熟悉的隐式意图就是我们写的入门程序:电话拨号器

电话拨号器

public void click(View v) {    //与显式意图,不同的是在构造Intent对象的时候我们并不指定接受者    Intent intent = new Intent();    //设置意图的动作    intent.setAction(Intent.ACTION_CALL);    //设置意图的数据    intent.setData(Uri.parse("tel:" + 123456));    this.startActivity(intent);}
Android系统拨号器的清单文件
Demo

通过Intent让Activity返回数据

997244-20170606101849653-785427449.gif

Step[1] 发送短信一定要找到发送短信的activity,通过打Log的方式找到该Activity

//父Activity的代码public class MainActivity extends AppCompatActivity {    private Button btn_send;    private final int SECODACTIVITY_REQUESTCODE = 1;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        btn_send = (Button) findViewById(R.id.btn_send);    }    public void click(View v) {        Intent intent = new Intent(this, SecondActivity.class);        //允许子Activity可以返回结果        startActivityForResult(intent, SECODACTIVITY_REQUESTCODE);    }    /*当子activity关闭的时候就会执行这个方法。     *Node:只有通过【startActivityForResult()】方法开启Activity的是否再回执行此方法     *当子Activity有多个的时候并且都需要返回数据的时候那么结果码的作用就     *非常重要了,可以通过不同的请求码来标识各个子activity并且通过请求码来判断     *返回的数据来自于哪个子Activity。     *resultCode:用来标识子activity执行的状态:比如是否成功等等     */    @Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {        super.onActivityResult(requestCode, resultCode, data);        if (resultCode == Activity.RESULT_OK                && requestCode == this.SECODACTIVITY_REQUESTCODE)            if (data.hasExtra("txt")) {                String str = data.getStringExtra("txt");                Toast.makeText(this, str, Toast.LENGTH_SHORT).show();            }    }}

子Activity的代码

public class SecondActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_second);    }    public void click(View v) {        Intent intent = new Intent();        intent.putExtra("txt", "我要返回数据");        //设置activity将要返回的数据        //参数 结果码:表示状态如:是否成功等, Intent 用来传递数据的意图        this.setResult(Activity.RESULT_OK, intent);        //结束Activity        finish();    }

Intent-Filter 意图过滤器

如果Intent的接受者,想要告诉自己可以接收和响应哪些Intent,那么就需要Intent-Filter了

Intent-Filter负责过滤掉无法响应的Intent,采用的是一种 【白名单】的机制,Intent-Filter只过滤【隐式意图】,一个接受者可以有多个Intent-Filter,只需要满足其中一个的过滤方式即可。

一个Intent-Filter 可以包含以下的过滤条件

Action

​ 一个Intent只能是一个动作,但是一个Intent-Filter可以有一个或者多个action进行过滤。Intent只需要匹配一个就可了。

Data

​ [0]scheme 属性设置参数过滤

​ [1] Data可以有零个或者多个;

​ [2] 如果Intent-Filter 没有设置Data 那么Intent也必须没有Data才行

​ [3] 如果Internet-Filter 没哟设置 mimeType 那么只需要对应 Data 即可

​ [4]如果设置了mimeType那么必须Data和Type都对应才行

Category

​ 指定在什么样子的环境下动作才会被响应,一个Intent-filter 可以有多个Category可以自定义或者使用android本身的。

转载于:https://www.cnblogs.com/slyfox/p/6945297.html

你可能感兴趣的文章
Hadoop2.6.0伪分布环境搭建
查看>>
断点续传(代码实现)
查看>>
Stanford机器学习---第五讲. 神经网络的学习 Neural Networks learning
查看>>
我曾经七次鄙视自己的灵魂 卡里.纪伯伦
查看>>
上传RNA-seq数据到NCBI GEO数据库
查看>>
3分钟快速presentation
查看>>
弹出无边框网页的Javscrpt代码
查看>>
C#代码中背后进行的值拷贝
查看>>
事件处理程序的执行上下文
查看>>
现代软件工程讲义 目录
查看>>
android 拨打电话与发送短信
查看>>
ORM内核原理解析之:延迟加载
查看>>
Oracle 默认表空间(default permanent tablespace) 说明
查看>>
jquery 遍历 TextBox 输入框求和,求平均值并判断输入内容是否为数字
查看>>
设计模式之十(外观模式)
查看>>
Dapper的语法应用
查看>>
easyui的validatebox重写自定义验证规则的几个实例
查看>>
ubuntu下定时任务的执行
查看>>
Effective C++ 条款44
查看>>
如何用消息系统避免分布式事务?
查看>>