Android中的意图包含多种用法,本文主要包括以下内容

  1. 显式意图
  2. 隐匿意图
  3. 要求结果回传的意图

显式意图 :必须指定要激活的组件的完整包名和类名 (应用程序之间耦合在一起)
一般激活自己应用的组件的时候 采用显示意图

隐式意图: 只需要指定要动作和数据就可以 ( 好处应用程序之间没有耦合)
激活别人写的应用 隐式意图, 不需要关心对方的包名和类名

显式意图

//意图     开电视  打人  打酱油Intent intent = new Intent(this, CalcActivity.class);intent.putExtra("name", name);//显式意图//intent.setClassName(getPackageName(), "com.itheima.rpcalc.CalcActivity");//不指定动作,也不指定数据 直接指定要激活的组件startActivity(intent);

显式意图接收

public class CalcActivity extends Activity {private TextView tv_result;//当activity被创建的时候调用的方法@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_calc);tv_result = (TextView) findViewById(R.id.tv_result);Intent intent = getIntent();String name = intent.getStringExtra("name");byte[] result = name.getBytes();int number = 0;for(byte b :result){number += b&0xff;}int sorce = Math.abs(number)%100;tv_result.setText(name+"的人品:"+sorce);}
}

隐式意图

隐式意图只要设置action与data即可

要实现隐式意图,首先要在Manifest文件中配置action,category,mimetype等

<activity android:name="com.itheima.intent2.SecondActivity" ><intent-filter><action android:name="com.itheima.intent2.open2" /><category android:name="android.intent.category.DEFAULT" /><data android:mimeType="application/person" /><data android:scheme="jianren" /></intent-filter></activity>

隐式意图的实现

public void click(View view) {// 打 action// 人 数据// 附件的数据 Category 类别Intent intent = new Intent();intent.setAction("com.itheima.intent2.open2");intent.addCategory(Intent.CATEGORY_DEFAULT);// URL:统一资源定位符 http https ftp rtsp: URI:统一资源标识符 url是uri的一个子集// intent.setData(Uri.parse("jianren:张三"));  setData与setType是对立的,不能同时使用,同时使用时要用setDataAndType// intent.setType("application/person");intent.setDataAndType(Uri.parse("jianren:张三"), "application/person");startActivity(intent);}

使用隐式意图打开浏览器的一个例子

浏览器的属性配置如下

<intent-filter><action android:name="android.intent.action.VIEW" /><category android:name="android.intent.category.BROWSABLE" /><category android:name="android.intent.category.DEFAULT" /><data android:scheme="http" /><data android:scheme="https" /><data android:scheme="inline" /><data android:mimeType="text/html"/><data android:mimeType="text/plain"/><data android:mimeType="application/xhtml+xml"/><data android:mimeType="application/vnd.wap.xhtml+xml"/></intent-filter>

利用隐式意图实现

    public void click(View view){
//        <action android:name="android.intent.action.VIEW" />
//        <category android:name="android.intent.category.DEFAULT" />
//        <category android:name="android.intent.category.BROWSABLE" />
//        <data android:scheme="http" />
//        <data android:scheme="https" />
//        <data android:scheme="about" />
//        <data android:scheme="javascript" />Intent intent = new Intent();intent.setAction("android.intent.action.VIEW");intent.addCategory("android.intent.category.DEFAULT");intent.addCategory("android.intent.category.BROWSABLE");intent.setData(Uri.parse("http://www.baidu.com"));startActivity(intent);}

得到返回值的Intent实现,短信助手实例

public class MainActivity extends Activity {private EditText et_content;private EditText et_number;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);et_content = (EditText) findViewById(R.id.et_content);et_number = (EditText) findViewById(R.id.et_number);}public void selectSms(View view) {Intent intent = new Intent(this, ListSmsActivity.class);// 开启一个新的界面,并且获取界面的返回值// startActivity(intent);// int requestCode 请求码startActivityForResult(intent, 0);}public void selectNumber(View view) {Intent intent = new Intent(this, ListNumberActivity.class);// 开启一个新的界面,并且获取界面的返回值// startActivity(intent);// int requestCode 请求码startActivityForResult(intent, 1);}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {if (data != null) {String smsinfo = data.getStringExtra("smsinfo");if (resultCode == 0) {et_content.setText(smsinfo);} else if (resultCode == 1) {et_number.setText(smsinfo);}}super.onActivityResult(requestCode, resultCode, data);}public void sendSms(View view){String content = et_content.getText().toString().trim();String number = et_number.getText().toString().trim();SmsManager.getDefault().sendTextMessage(number, null, content, null, null);Toast.makeText(this, "发送成功", 0).show();}
}

编辑短信

public class ListSmsActivity extends Activity {private ListView lv;private String[] objects = {"玫瑰香香,情人黏黏,情话甜甜,情歌绵绵;花灯灿灿,礼花点点,好运连连,好梦圆圆。情人节喜逢元宵节,喜鹊登枝蝴蝶成双鸳鸯成对双喜临门祝双节快乐,合家团团圆圆,甜甜蜜蜜,开开心心,幸幸福福","情人节快到了,我精心挑选玫瑰花、百合花和满天星,扎成一束鲜花随短信送给你,火红的玫瑰代表热烈奔放,洁白的百合代表百年好合,小小的满天星代表幸福美好。愿你的情人节热烈奔放,你们的爱情百年好合,你们的生活幸福美满。预祝情人节快乐","^o^满天星光,最爱你许过愿望的那一颗,鲜花绽放,最爱你摘下微笑的那一朵,曼妙旋律,最爱你感动落泪的那一段,亲爱的,情人节快乐,爱你。 ","^o^宝贝,情人节到了,送你一束玫瑰,用真心塑料纸包扎,系上快乐彩带,喷点爱的香水,插一张真情卡片,写着:宝贝,愿我的爱能带给你一生的快乐!" };@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_sms);lv = (ListView) findViewById(R.id.lv);lv.setAdapter(new ArrayAdapter<String>(this, R.layout.sms_item,R.id.tv_info, objects));lv.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view,int position, long id) {String smsinfo = objects[position];Intent data = new Intent();data.putExtra("smsinfo", smsinfo);//设置数据。setResult(0, data);//关闭掉当前的activity,并且回传数据 onActivityResult().finish();}});}
}

选择联系人

public class ListNumberActivity extends Activity {private ListView lv;private String[] objects = {"1234","34324","5643543","32424" };@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_sms);lv = (ListView) findViewById(R.id.lv);lv.setAdapter(new ArrayAdapter<String>(this, R.layout.sms_item,R.id.tv_info, objects));lv.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view,int position, long id) {String smsinfo = objects[position];Intent data = new Intent();data.putExtra("smsinfo", smsinfo);//设置数据。setResult(1, data);//关闭掉当前的activity,并且回传数据 onActivityResult().finish();}});}
}

完成

Android之Intent深入相关推荐

  1. android intent email,Android Email Intent

    问题 I've set up two buttons. One opens the compose sms intent and the other opens the compose email i ...

  2. Android中Intent传递对象的两种方法(Serializable,Parcelable)

    这篇文章转自博客园 Android中Intent中如何传递对象,就我目前所知道的有两种方法,一种是Bundle.putSerializable(Key,Object);另一种是Bundle.putPa ...

  3. 3.1 Android组件intent filter

    3.1.0 Intent filter基本概念 前面章节我们说到了Intent,Intent对象中除了ComponentName可以直接指定目标组件外,其它的属性都无法直接指定目标组件.当然我们这里不 ...

  4. 【Android】 Intent应用详解

    转载:http://blog.csdn.net/liuhe688/article/details/7162988 看似尋常最奇崛,成如容易卻艱辛.北宋.王安石 看似普通的事情其实最不同寻常,并不是简简 ...

  5. Android的Intent Action 大全

    为什么80%的码农都做不了架构师?>>>    1.Intent的用法: (1)Action跳转 1. 使用Action跳转,当程序AndroidManifest.xml中某一个 A ...

  6. Android中Intent传递Object和ArrayListObject对象---笔记

    首先看一下Intent的官方的API. 传递一些基本类型数据的方法如下: putExtra(String name, int value) putExtra(String name, String v ...

  7. Android的intent之间复杂参数的传递

    2019独角兽企业重金招聘Python工程师标准>>> Intent是Activity与Activity之间,Activity与Service之间传递参数的介质 Intent传递的参 ...

  8. android intent拍照,Android通过Intent方式调用相机拍照取得图片

    Android通过Intent方式调用相机拍照取得图片 AndroidManifest.XML 权限设置: XML布局设置: 代码: public classMainActivityextendsAp ...

  9. Android之Intent传递数据

    1.Android中的Intent对象中包含了多个putXXX()方法(如putExtra()方法)用来插入不同类型的额外数据,也包含了多个getXXX()方法(如getStringExtra().g ...

  10. android之Intent的七大属性

    Intent用于封装程序的"调用意图".两个Activity之间,可以把需要交换的数据,封装成Bundle对象,然后使用Intent对象,携带数据到另一个Activity中.实现两 ...

最新文章

  1. centos7 设置中文
  2. Java基础篇:异常处理
  3. 近期AI领域8篇精选论文(附论文、代码)
  4. Linux内存管理【转】
  5. 深入理解分布式技术 - 分布式缓存实战_常见的坑及解决办法
  6. 初中计算机知识点 考题,初中信息技术考题规律及趋势_教师资格面试初中信息技术...
  7. SQL SERVER 用sql语句将一列数据拼接成一个字符串
  8. 单片机开发与Linux开发有何不同?
  9. mininet在哪编写python脚本_1 mininet 简介及同时支持python2和python3
  10. 采购光纤收发器时应该注意哪些事项?
  11. 第十二期:七种优秀的浏览器兼容性测试工具
  12. 12699元的iPhone 11 Pro Max物料成本却不足3500元,苹果赚疯了?
  13. HIve:beeline终端上在输错hive语句时,无论 Backspace还是delete 都删除不掉错误的语句,没有办法退格...
  14. chrome jsp 显示不正常_selenium+java谷歌浏览器 网站打开不正常
  15. hibernate FetchType理解
  16. 如何在你的 wordpress 网站中添加搜索框
  17. Android 数据库技术
  18. DGV:人类基因组结构变异数据库
  19. 【日常折腾】Y7000P触控板失灵这件事
  20. strstr和strchr的区别

热门文章

  1. 细说ReactiveCocoa的冷信号与热信号(一)
  2. 人物志 | KDD Cup 2017双料冠军燕鹏
  3. 直通BAT必考题系列:深入详解JVM内存模型与JVM参数详细配置
  4. Redis系列教程(三):如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题
  5. 深度学习技术在机器阅读理解应用的研究进展
  6. 我的《Android官方开发文档Training系列课程中文版》的中期翻译计划
  7. 使用ngModel创建组件
  8. 【原】Win SQL Server2012 IIS 安装(图文详解)
  9. Android调用binder实现权限提升-android学习之旅(81)
  10. centos设置开机自启动