Intent---学习笔记

Intent是四大组件间传值的纽带

Intent通过下面的属性来描述以上的某个意图:

1、Action(动作):用来表示意图的动作,如:查看,发邮件,打电话

2、category(类别):用来表示动作的类别。

3、data(数据):表示与动作要操作的数据。如:查看联系人

4、type(数据类型):对data类型的描述。

5、extras(附件信息):附件信息。如:详细资料,一个文件,某事。

6、component(目标组件):目标组件。

显示Intent:对于明确指出了目标组件名称的Intent(调用setComponent或setClass来指定)。
隐式Intent:对于没有明确指出目标组件名称的Intent。于隐式Intent,由于没有明确的目标组件名称,所以必须包含足够的属性信息,他们是:Action,Data,Category。再由Android系统帮助应用程序寻找与Intent请求意图最匹配的组件。
显式Intent直接用组件的名称定义目标组件,这种方式很直接。显式Intent多用于在应用程序内部传递消息。比如在某应用程序内,一个Activity启动一个Service。隐式Intent恰恰相反,由于开发人员往往并不清楚别的应用程序的组件名称,它不会用组件名称定义需要激活的目标组件,它更广泛地用于在不同应用程序之间传递消息。

Intent原理?

你的程序向Android发送一个Inent请求,Android会根据Intent的内容在注册的IntentFilter中选择适当的组件来响应。比如,有一个Activity希望打开网页浏览器查看某一网页的内容,那么这个Activity只需要发出WEB_SEARCH_ACTION请求给Android,Android会根据Intent的请求内容,查询各组件注册时声明的IntentFilter,找到网页浏览器Activity来浏览网页。

什么是intentService?intentService和service区别?

异步处理服务,新开一个线程:handlerThread在线程中发消息,然后接受处理完成后,会清理线程,并且关掉服务。它和Intent没半毛钱关系

IntentService是继承Service的,那么它包含了Service的全部特性,当然也包含service的生命周期,那么与service不同的是,IntentService在执行onCreate操作的时候,内部开了一个线程,去执行你的耗时操作。service提供了一个方法 onStartCommand 当service启动或被调用时候会执行这个方法。  

IntentService有以下特点:

(1)  它创建了一个独立的工作线程来处理所有的通过onStartCommand()传递给服务的intents。

(2)  创建了一个工作队列,来逐个发送intent给onHandleIntent()。

(3)  不需要主动调用stopSelft()来结束服务。因为,在所有的intent被处理完后,系统会自动关闭服务。

(4)  默认实现的onBind()返回null

(5)  默认实现的onStartCommand()的目的是将intent插入到工作队列中

Intent的各种用法

显示网页:

Uri uri = Uri.parse("http://www.google.com");

Intent it   =newIntent(Intent.ACTION_VIEW,uri);

startActivity(it);

显示地图:

Uri uri = Uri.parse("geo:38.899533,-77.036476");

Intent it =newIntent(Intent.Action_VIEW,uri);

startActivity(it);

路径规划:

Uri uri = Uri.parse("http://maps.google.com/maps?f=d&saddr=startLat%20startLng&daddr=endLat%20endLng&hl=en");

Intent it =newIntent(Intent.ACTION_VIEW,URI);

startActivity(it);

拨打电话:

调用拨号程序

Uri uri = Uri.parse("tel:xxxxxx");

Intent it =newIntent(Intent.ACTION_DIAL, uri);

startActivity(it);

Uri uri = Uri.parse("tel.xxxxxx");

Intent it =newIntent(Intent.ACTION_CALL,uri);

要使用这个必须在配置文件中加入

发送SMS/MMS

调用发送短信的程序

Intent it =newIntent(Intent.ACTION_VIEW);

it.putExtra("sms_body","The SMS text");

it.setType("vnd.android-dir/mms-sms");

startActivity(it);

发送短信

Uri uri = Uri.parse("smsto:0800000123");

Intent it =newIntent(Intent.ACTION_SENDTO, uri);

it.putExtra("sms_body","The SMS text");

startActivity(it);

发送彩信

Uri uri = Uri.parse("content://media/external/images/media/23");

Intent it =newIntent(Intent.ACTION_SEND);

it.putExtra("sms_body","some text");

it.putExtra(Intent.EXTRA_STREAM, uri);

it.setType("image/png");

startActivity(it);

发送Email

Uri uri = Uri.parse("mailto:xxx@abc.com");

Intent it =newIntent(Intent.ACTION_SENDTO, uri);

startActivity(it);

Intent it =newIntent(Intent.ACTION_SEND);

it.putExtra(Intent.EXTRA_EMAIL,"me@abc.com");

it.putExtra(Intent.EXTRA_TEXT,"The email body text");

it.setType("text/plain");

startActivity(Intent.createChooser(it,"Choose Email Client"));

Intent it=newIntent(Intent.ACTION_SEND);

String[] tos={"me@abc.com"};

String[] ccs={"you@abc.com"};

it.putExtra(Intent.EXTRA_EMAIL, tos);

it.putExtra(Intent.EXTRA_CC, ccs);

it.putExtra(Intent.EXTRA_TEXT,"The email body text");

it.putExtra(Intent.EXTRA_SUBJECT,"The email subject text");

it.setType("message/rfc822");

startActivity(Intent.createChooser(it,"Choose Email Client"));

添加附件

Intent it =newIntent(Intent.ACTION_SEND);

it.putExtra(Intent.EXTRA_SUBJECT,"The email subject text");

it.putExtra(Intent.EXTRA_STREAM,"file:///sdcard/mysong.mp3");

sendIntent.setType("audio/mp3");

startActivity(Intent.createChooser(it,"Choose Email Client"));

播放多媒体

Intent it =newIntent(Intent.ACTION_VIEW);

Uri uri = Uri.parse("file:///sdcard/song.mp3");

it.setDataAndType(uri,"audio/mp3");

startActivity(it);

Uri uri = Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI,"1");

Intent it =newIntent(Intent.ACTION_VIEW, uri);

startActivity(it);

Uninstall 程序

Uri uri = Uri.fromParts("package", strPackageName,null);

Intent it =newIntent(Intent.ACTION_DELETE, uri);

startActivity(it);

Install 程序

Uri installUri = Uri.fromParts("package","xxx",null);

returnIt =newIntent(Intent.ACTION_PACKAGE_ADDED, installUri);

[javascript]view plain

//搜索应用

Uri uri = Uri.parse("market://search?q=pname:pkg_name");

Intent it =newIntent(Intent.ACTION_VIEW, uri);

startActivity(it);

//where pkg_name is the full package path for an application

//显示指定应用的详细页面(这个好像不支持了,找不到app_id)

Uri uri = Uri.parse("market://details?id=app_id");

Intent it =newIntent(Intent.ACTION_VIEW, uri);

startActivity(it);

//where app_id is the application ID, find the ID

//by clicking on your application on Market home

//page, and notice the ID from the address bar

[java]view plain

打开另一程序

Intent i =newIntent();

ComponentName cn =newComponentName("com.drip.android2",

"com.drip.android2.AndroidSearch");

i.setComponent(cn);

i.setAction("android.intent.action.MAIN");

startActivityForResult(i, RESULT_OK);

打开联系人列表

<1>

Intent i =newIntent();

i.setAction(Intent.ACTION_GET_CONTENT);

i.setType("vnd.android.cursor.item/phone");

startActivityForResult(i, REQUEST_TEXT);

<2>

Uri uri = Uri.parse("content://contacts/people");

Intent it =newIntent(Intent.ACTION_PICK, uri);

startActivityForResult(it, REQUEST_TEXT);

打开录音机

Intent mi =newIntent(Media.RECORD_SOUND_ACTION);

startActivity(mi);

从gallery选取图片

Inten t i =newIntent();

i.setType("image/*");

i.setAction(Intent.ACTION_GET_CONTENT);

startActivityForResult(i,11);

打开照相机

<1>Intent i =newIntent(Intent.ACTION_CAMERA_BUTTON,null);

this.sendBroadcast(i);

<2>longdateTaken = System.currentTimeMillis();

String name = createName(dateTaken) +".jpg";

fileName = folder + name;

ContentValues values =newContentValues();

values.put(Images.Media.TITLE, fileName);

values.put("_data", fileName);

values.put(Images.Media.PICASA_ID, fileName);

values.put(Images.Media.DISPLAY_NAME, fileName);

values.put(Images.Media.DESCRIPTION, fileName);

values.put(Images.ImageColumns.BUCKET_DISPLAY_NAME, fileName);

Uri photoUri = getContentResolver().insert(

MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);

Intent inttPhoto =newIntent(MediaStore.ACTION_IMAGE_CAPTURE);

inttPhoto.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);

startActivityForResult(inttPhoto,10);

播放多媒体

Intent it =newIntent(Intent.ACTION_VIEW);

Uri uri = Uri.parse("file:///sdcard/song.mp3");

it.setDataAndType(uri,"audio/mp3");

startActivity(it);

或者

Uri uri = Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI,"1");

Intent it =newIntent(Intent.ACTION_VIEW, uri);

startActivity(it);

或者

Uri playUri = Uri.parse("file:///sdcard/download/everything.mp3");

returnIt =newIntent(Intent.ACTION_VIEW, playUri);

发送Email

Uri uri = Uri.parse("mailto:xxx@abc.com");

Intent it =newIntent(Intent.ACTION_SENDTO, uri);

startActivity(it);

或者:

Intent intent =newIntent(Intent.ACTION_SEND);

intent.putExtra(Intent.EXTRA_EMAIL, address);

intent.putExtra(Intent.EXTRA_SUBJECT, filename);

intent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://"+ filename)); ;

intent.setType("text/csv");

startActivity(Intent.createChooser(intent,"EMail File"));

或者:

Intent it =newIntent(Intent.ACTION_SEND);

it.putExtra(Intent.EXTRA_EMAIL,"me@abc.com");

it.putExtra(Intent.EXTRA_TEXT,"The email body text");

it.setType("text/plain");

startActivity(Intent.createChooser(it,"Choose Email Client"));

或者:

Intent it=newIntent(Intent.ACTION_SEND);

String[] tos={"me@abc.com"};

String[] ccs={"you@abc.com"};

it.putExtra(Intent.EXTRA_EMAIL, tos);

it.putExtra(Intent.EXTRA_CC, ccs);

it.putExtra(Intent.EXTRA_TEXT,"The email body text");

it.putExtra(Intent.EXTRA_SUBJECT,"The email subject text");

it.setType("message/rfc822");

startActivity(Intent.createChooser(it,"Choose Email Client"));

或者:

Intent it =newIntent(Intent.ACTION_SEND);

it.putExtra(Intent.EXTRA_SUBJECT,"The email subject text");

it.putExtra(Intent.EXTRA_STREAM,"file:///sdcard/mysong.mp3");

sendIntent.setType("audio/mp3");

startActivity(Intent.createChooser(it,"Choose Email Client"));

后台发送短信

注册权限

代码实现 :

// 获取信息内容

String message ;

// 移动运营商允许每次发送的字节数据有限,我们可以使用Android给我们提供 的短信工具。

if(message !=null) {

SmsManager sms = SmsManager.getDefault();

// 如果短信没有超过限制长度,则返回一个长度的List。

List texts = sms.divideMessage(message);

for(String text : texts) {

sms.sendTextMessage(“这里是接收者电话号码”,  “这里是发送者电话号码”,  “这里是短信内容”,null,null);

}

}

//说明

sms.sendTextMessage(destinationAddress, scAddress, text, sentIntent, deliveryIntent):

destinationAddress:接收方的手机号码

scAddress:发送方的手机号码

text:信息内容

sentIntent:发送是否成功的回执,

DeliveryIntent:接收是否成功的回执,

从google搜索内容

Intent intent =newIntent();

intent.setAction(Intent.ACTION_WEB_SEARCH);

intent.putExtra(SearchManager.QUERY,"searchString")

startActivity(intent);

[java]view plain

APK 安装

Intent intent =newIntenet();

String filepath="/SDCard/XXX.apk";

[java]view plain

intent.setDataAndType(Uri.parse("file://"+ filepath),"application/vnd.android.package-archive");

starActivity(intent);

Activity之间的传递

[java]view plain

Intent intent=newIntent();

intent.setClass(MainActivity.this, SecondActivity.class);

startActivity(intent);

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容

  • Intent应该算是Android中特有的东西。你可以在Intent中指定程序要执行的动作(比如:view,edi...
    Ten_Minutes阅读 3,528评论 0 6
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,350评论 0 17
  • (1)闹钟 创建闹钟(ACTION_SET_ALARM)示例Intent: 注:为了调用ACTION_SET_AL...
    sunnygarden阅读 1,599评论 0 10
  • 今日 阳光从窗子 照进 把 你的影子 轻轻消隐 轻轻消隐
    矢北阅读 214评论 0 2
  • 大家好,感谢你点开红红的空间,来浏览红红的第17篇原创文章! 我是红红,专注微商,目前在全国影响最大,人数最多的圈...
    红红小丸子阅读 671评论 0 0