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被创建的时候调用的方法
@Override
protected 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; @Override
protected 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);
} @Override
protected 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^宝贝,情人节到了,送你一束玫瑰,用真心塑料纸包扎,系上快乐彩带,喷点爱的香水,插一张真情卡片,写着:宝贝,愿我的爱能带给你一生的快乐!" }; @Override
protected 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() { @Override
public 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" }; @Override
protected 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() { @Override
public 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 and Bundle day7

    学习了Intent与Bundle的使用,进行应用中的交互 package com.example.intent; import android.app.Activity; import android ...

  2. Android 通过 Intent 传递类对象或list对象

    (转:http://www.cnblogs.com/shaocm/archive/2013/01/08/2851248.html) Android中Intent传递类对象提供了两种方式一种是 通过实现 ...

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

    今天要给大家讲一下Android中 Intent中如何传递对象,就我目前所知道的有两种方法,一种是Bundle.putSerializable(Key,Object);另一种是 Bundle.putP ...

  4. Android中Intent传值与Bundle传值的区别详解

    Android中Intent传值与Bundle传值的区别详解 举个例子我现在要从A界面跳转到B界面或者C界面   这样的话 我就需要写2个Intent如果你还要涉及的传值的话 你的Intent就要写两 ...

  5. android使用Intent操作拨打号码发送短信

    Activity程序Activity.java package com.example.intentcaseproject; import android.net.Uri; import androi ...

  6. Android 通过 Intent 传递类对象

    Android中Intent传递类对象提供了两种方式一种是 通过实现Serializable接口传递对象,一种是通过实现Parcelable接口传递对象. 要求被传递的对象必须实现上述2种接口中的一种 ...

  7. android startActivityForResult(Intent intent, int requestCode) 整理与总结! .

    假设有两个Activity,主界面A,功能界面B,由A启动B,并传数据给B,B在经过处理后把数据传回给A. 先是A传B: Bundle bundle = new Bundle();bundle.put ...

  8. android 使用intent传递参数实现乘法计算

    主界面上是两个EditText和一个按钮.用于输入两个数字参数. calcute.xml: <?xml version="1.0" encoding="utf-8& ...

  9. android之intent显式,显式学习

    intent,意图 当从一个Activity到另一个Activity时调用,这里重点学习显式,隐式的使用 使用语句上的区别: 隐式意图:                 显式意图: setAction ...

  10. Android利用Intent与其他应用交互

    前言: 上一篇博客给大家聊了Intent的定义,分类.属性和功能,相信大家对于Intent在Android中的作用已经清楚,这一篇博客将会给大家聊Intent的用法. Android系统的一个重要特性 ...

随机推荐

  1. 安卓系统源码编译系列(六)——单独编译内置浏览器WebView教程

    原文                   http://blog.csdn.net/zhaoxy_thu/article/details/18883015                 本文主要对从 ...

  2. linux 7 常见命令

    修改网卡配置文件,如下:ONBOOT=yesIPADDR=192.168.1.11NETMASK=255.255.255.0NM_CONTROLLED=no重启网卡:systemctl restart ...

  3. 中国天气网-天气预报接口api

    中国天气网地址:http://www.weather.com.cn 请求服务 : 查询实时天气信息 http://www.weather.com.cn/data/sk/101110101.html 在 ...

  4. Nagios配置和命令介绍(二 )

    Nagios配置 Nagios 主要用于监控一台或者多台本地主机及远程的各种信息,包括本机资源及对外的服务等.默认的Nagios 配置没有任何监控内容,仅是一些模板文件.若要让Nagios 提供服务, ...

  5. hdu 2049 不容易系列之(4)——考新郎

    在本博AC代码中,求CNM用的是Anm/amm没用阶乘的形式,两者皆可 #include <stdio.h> int main(void) { long long a,b,larr[21] ...

  6. [LeetCode] next_permutation

    概念 全排列的生成算法有很多种,有递归遍例,也有循环移位法等等.C++/STL中定义的next_permutation和prev_permutation函数则是非常灵活且高效的一种方法,它被广泛的应用 ...

  7. xss绕过过滤之方法

    很多网站为了避免XSS的攻击,对用户的输入都采取了过滤,最常见的就是对<>转换成<以及>,经过转换以后<>虽然可在正确显示在页面上,但是已经不能构成代码语句了.这个 ...

  8. 反射型xss绕过IE xss filter

    反射xss利用方法,绕过IE XSS Filter 假设 1.php页面代码如下: echo $_GET['str']; 使用IE浏览器访问该页面 1.php?str=<xss code> ...

  9. cmd+lcx+nc+sc提权工具总结

    cmd:执行命令的载体cmdshell lcx:端口映射工具 1.在自己的host上的cmd下运行:lcx.exe -listen 51 3389 //意思是监听51端口并转发到3389端口 2.在服 ...

  10. webshell提权20种思路

    1,SER-TU提权(通常是利用SERFTP服务器管理工具,首先要在安装目录下找到INI配置文件,必须具备可写入的权限)2,RADMIN提权(大家并不陌生,我们在扫描4899空口令后,同样需要他来连接 ...