Android组件连串—-Intent详解

SecureList预测,2018年 工控安全 将晤面临那些方面包车型客车风险,
包涵恶意软件及恶意工具不断出新、地下黑市提供攻击服务、定向勒索攻击、工业间谍,但犯罪团伙尚未找到攻击工控系统毛利的不二法门。与此同时,国家规定也在产生变化,工安保管日益走热。

 【声明】 

二〇一七年工控安全态势

2017年影响 工控音信安全 事件最集中产生的年头之一。安全探讨员发现并汇报了数百个新漏洞,警告称工控系统和流程中设有新勒迫向量,提供了工业系统突发感染数据,并发现了定向攻击(例如, Shamoon
2.0 
宗教活动,StoneDrill)。自从震网( Stuxnet )病毒揭露以来,研商员第一次发现了黑心工具包 CrashOverride Industroyer ,即一种用于攻击物理系统的网络工具。

可是,二零一七年工业系统受到的最严重威逼是加密 勒索软件 攻击。卡Bath基实验室发表的ICS
CE奥迪Q5T(工业控制种类网络应急小组)报告提议,专家上三个月发觉了三十七个 恶意软件 家门的加密勒索软件。满世界6三个国家的汪洋抨击被截留。WannaCry 和 ExPetr 毁灭性勒索软件攻击就如使工企对重要生产系统防护的姿态初始发生转移。

欢迎转发,但请保留小说原来出处→_→ 

二零一八年工控安全预测 面临九个地点的威慑

1. 诚如和产生恶意软件感染有所进步。 除极少数个例之外,互连网犯罪团伙尚未商量出通过攻击工业音信种类而获利的简要可信赖的方案。他们一般使用通用恶意代码攻击更为古板的目标(如公司网络),引起工业网络的突发感染和事件。那种势头在二零一八年仍将随地。同时,大家还也许会看出那种趋势会为工业条件带来更为严苛的金昌挑战。尽管安全社区不止叁回地警告工企要定期更新工业系统中的软件与商店互联网保持一致,但仍未引起集团的爱惜。

2. 定向勒索软件攻击的高风险更高。 WannaCry和ExPetr攻击爆发后,安全专家和 网络犯罪 成员均得出:运行技术(OT)系统一般可经过网络接入,与IT系统相比,更易于受到攻击,而且,恶意软件导致的损害更大,更难防护。工企展示了看守针对OT 基本功设备 的网络攻击的难度。全体那个因素促使工业系统成为勒索软件攻击所注重的目的。

3. 工业网络间谍事件拉长。 勒索攻击 为工业公司带来的要挟日益增加,催生了别样世界的互联网犯罪:通过窃取工业音信系列的多少筹备和施行定向(包括勒索软件)攻击。

4. 不合法黑市的新运动首要集中于提供攻击服务和侵袭工具。 近日,大家发现黑市对此ICS 0Day漏洞 攻击的须要增进,能够看清犯罪分子正在筹措定向攻击活动。大家预测2018年攻击者对该类活动的热心肠更高,那将带动黑市的滋长,导致工企的一局地新的ICS配置数据和证据被窃取,还大概会现出基于工业节点产品组装的僵尸网络。设计和进行针对物理对象和系统的高级网络攻击须要ICS和有关行业的专业知识。算计这个要求会促进 恶意软件即服务 、攻击向量设计即服务、攻击行动即服务等领域的增长。

5. 最新恶意软件和恶心工具。 或者会并发用于攻击工业互联网和费用的新恶意软件。这么些黑心软件行动隐蔽,潜伏在IT网络中规避检查和测试,只在不太安全的OT设施中激活。还也许出现面向低级的ICS设备和物理资产(泵和电源开关等)的勒索软件。

6. 犯罪分子大概会选取安全厂商发表的 ICS 威逼分析小说。 切磋员公开发布了工业费用和根基设备相关的各个攻击向量,并分析了所发现的黑心工具集,那个干活儿做得很出彩。可是,那也给犯罪分子提供了新的可乘之机。例如,CrashOverride/Industroyer工具集揭露后,黑客就向电力和财富装备发起了闭门羹服务 DDoS攻击 。犯罪分子还引入了勒索软件,甚至制定了停电时期的扭亏布署。他们还可遵照 可编制程序逻辑控制器(PLC)蠕虫 概念创设可运维的黑心蠕虫。还有犯罪分子还盘算动用一种标准的PLC编制程序语言完结恶意软件。其它,他们还只怕会对这一PLC感染概念举办了立异。最近,现有安全方案还无法察觉那两类恶意软件。

7. 国家规定发生变化。 二零一八年将进行多少个工业系统有关网络安全规定。例如,涉及 器重基础设备 和工业开销设备的商号大概须进行越来越多的 平安评估 。那必定会提高预防和 有惊无险意识 ,使我们兴许会意识愈多新漏洞,暴露更加多勒迫。

8. 工安确认保障日益走热 , 投资呈上涨趋势 。 对此工企来说,工业互联网风险确认保障正日趋成为危机管理的必备的一局地。以前,互连网安全事件与恐怖事件一样不会在保证合同中显示。可是,当前地势正在爆发变化, 互联网安全集团和担保集团都使用了新举动。2018年,安全审计/评估和 事件响应 均呈上升趋势,促使工业装备负责者和纳税义务人进步网络安全意识。

转发自安全加,原著地址: 
http://toutiao.secjia.com/2018-ics-predictions
万一此作品侵权,请留言,大家进行删除。

 

生命壹号:http://www.cnblogs.com/smyhvae/ 

 

文章来源:http://www.cnblogs.com/smyhvae/p/3959204.html 

 

【正文】

Intent组件即便不是四大组件,但却是连接第四次全国代表大会组件的大桥,学习好这些文化,也丰裕的首要。

一、什么是Intent

1、Intent的概念:

  • Android中提供了Intent机制来提携应用间的竞相与电视发表,或许选取更可相信的说法是,Intent不仅可用来应用程序之间,也可用来应用程序内部的activity, service和broadcast
    receiver之间的相互。Intent那么些爱尔兰语单词的原意是“目标、意向、意图”。
  • Intent是一种运维时绑定(runtime
    binding)机制,它能在程序运维的历程中总是五个区别的零件。通过Intent,你的先后能够向Android表明某种请求或然愿望,Android会根据意愿的始末选择适合的机件来响应。

activity、service和broadcast
receiver之间是经过Intent实行通讯的,而除此以外三个零部件Content
Provider本人便是一种通讯机制,不要求通过Intent。我们来看上边那么些图就知晓了:

宗教活动 1

只要Activity1须要和Activity2实行联系,二者不必要间接关联,而是经过Intent作为桥梁。通俗来讲,Intnet类似于中介、媒婆的剧中人物。

 

② 、对于向那二种组件发送intent有例外的编制:

  • 运用Context.startActivity() 或
    Activity.startActivityForResult(),传入一个intent来运营三个activity。使用
    Activity.setResult(),传入1个intent来从activity中回到结果。

  • 将intent对象传给Context.startService()来运转2个service也许传消息给二个周转的service。将intent对象传给
    Context.bindService()来绑定二个service。

  • 将intent对象传给
    Context.sendBroadcast(),Context.sendOrdered布罗兹cast(),大概Context.sendSticky布罗兹cast()等广播方法,则它们被传给 broadcast
    receiver。

二 、Intent的相干属性:

  • Intent由以下顺序组成都部队分:
  • component(组件):指标组件
  • action(动作):用来表现意图的走动
  • category(种类):用来展现动作的系列
  • data(数据):表示与动作要控制的数码
  • type(数据类型):对于data范例的描摹
  • extras(扩大新闻):扩大消息
  • Flags(标志位):期望以此意图的运作方式

Intent类型分为显式Intent(直接类型)、隐式Intent(直接类型)。官方提议采用隐式Intent。上述个性中,component属性为直接类型,其余均为直接类型。

相对而言与显式Intent,隐式Intnet则含蓄了不少,它并不分明提议我们想要运转哪叁个活动,而是钦定一连串更为抽象的action和category等新闻,然后交由系统去分析那一个Intent,并帮我们找出格外的移动去运转。

Activity 中 Intent Filter 的匹配进程:

宗教活动 2

 

壹 、component(组件):目标组件

Component属性鲜明钦定Intent的靶子组件的类名称。(属于直接Intent)

假若component那么些天性有钦定的话,将平昔动用它钦点的零部件。内定了这几个个性现在,Intent的其余具有属性都是可选的。

诸如,运转第二个Activity时,大家能够这么来写:

 1         button1.setOnClickListener(new OnClickListener() {            
 2             @Override
 3             public void onClick(View v) {
 4                 //创建一个意图对象
 5                 Intent intent = new Intent();
 6                 //创建组件,通过组件来响应
 7                 ComponentName component = new ComponentName(MainActivity.this, SecondActivity.class);
 8                 intent.setComponent(component);                
 9                 startActivity(intent);                
10             }
11         });

若是写的总结一点,监听事件onClick()方法里能够如此写:

1                 Intent intent = new Intent();
2                 //setClass函数的第一个参数是一个Context对象
3                 //Context是一个类,Activity是Context类的子类,也就是说,所有的Activity对象,都可以向上转型为Context对象
4                 //setClass函数的第二个参数是一个Class对象,在当前场景下,应该传入需要被启动的Activity类的class对象
5                 intent.setClass(MainActivity.this, SecondActivity.class);
6                 startActivity(intent);    

再简单一点,能够如此写:(当然,也是最广泛的写法)

1                 Intent intent = new Intent(MainActivity.this,SecondActivity.class);
2                 startActivity(intent);

 

 

② 、Action(动作):用来表现意图的行路

当平日生活中,描述三个希望或希望的时候,总是有一个动词在里面。比如:笔者想“做”四个俯卧撑;笔者要“写”
一封情书,等等。在Intent中,Action正是讲述做、写等动作的,当您指明了3个Action,执行者就会遵照本条动作的指令,接受相关输入,表现对应行为,爆发符合的出口。在Intent类中,定义了一批量的动作,比如ACTION_VIEW,ACTION_PICK等,
基本包涵了常用动作。加的动作越来越多,越规范。

Action
是二个用户定义的字符串,用于描述一个 Android 应用程序组件,二个 Intent
Filter 能够涵盖多少个 Action。在 AndroidManifest.xml 的Activity
定义时,能够在其 <intent-filter
>节点钦点贰个 Action列表用于标识
Activity 所能接受的“动作”。

 

③ 、category(种类):用来显示动作的品类

Category属性也是作为<intent-filter>子成分来声称的。例如:

<intent-filter>

  <action
android:name=”com.vince.intent.MY_ACTION”></action>

  <category
android:name=”com.vince.intent.MY_CATEGORY”></category> 

  <category
android:name=”android.intent.category.DEFAULT”></category> 

</intent-filter>   

Action
和category经常是位于一起用的,所以那边一起介绍一下。大家来先来举二个例子:

新建三个工程文件smyh006_Intent01,在默许文件的基本功之上,新建文件SecondActicity.java和activity_second.xml。

随即,我们要到清单文件中开始展览注册,打开AndroidManifest.xml,添加SecondActivity的action和category的过滤器:

1         <activity 
2             android:name=".SecondActivity">
3             <intent-filter>
4                  <action android:name="com.example.smyh006intent01.MY_ACTION"/>
5                  <category android:name="android.intent.category.DEFAULT" />
6             </intent-filter>            
7         </activity>

上边代码,表示SecondActicity能够合营第六行的MY_ACTION这几个动作,此时,即使在任何的Acticity通过这一个action的标准化来寻找,那SecondActicity就具备了这几个规则。类似于相亲时,小编须求对方有啥标准,然后对方这一个SecondActicity恰巧满意了那些原则(够通俗了吧)。

注:若是没有点名的category,则必须运用暗许的DEFAULT(即上方第⑤行代码)。

也等于说:唯有<action>和<category>中的内容还要可以合作上Intent中钦命的action和category时,这几个活动才能响应Intent。要是利用的是DEFAULT那种暗中同意的category,在稍后调用startActivity()方法的时候会自动将这几个category添加到Intent中。

目前来修改MainActivity.java中按钮的点击事件,代码如下:

 1         button1.setOnClickListener(new OnClickListener() {            
 2             @Override
 3             public void onClick(View v) {
 4                 //启动另一个Activity,(通过action属性进行查找)
 5                 Intent intent = new Intent();
 6                 //设置动作(实际action属性就是一个字符串标记而已)
 7                 intent.setAction("com.example.smyh006intent01.MY_ACTION"); //方法:Intent android.content.Intent.setAction(String action)
 8                 startActivity(intent);        
 9             }
10         });

上面代码中,也得以换到上边那种简单的艺术:

1         button1.setOnClickListener(new OnClickListener() {            
2             @Override
3             public void onClick(View v) {
4                 //启动另一个Activity,(通过action属性进行查找)
5                 Intent intent = new Intent("com.example.smyh006intent01.MY_ACTION");//方法: android.content.Intent.Intent(String action)                
6                 startActivity(intent);        
7             }
8         });

上边第陆行代码:在那几个Intent中,小编并不曾点名具体哪1个Activity,笔者只是内定了三个action的常量。所以说,隐式Intent的成效就表现的淋漓了。此时,点击MainActicity中的按钮,就会跳到SecondActicity中去。

上述情状唯有SecondActicity匹配成功。假使有多少个零件匹配成功,就会以对话框列表的方法让用户举办抉择。大家来详细介绍一下:

笔者们新建文件ThirdActicity.java和activity_third.xml,然后在清单文件AndroidManifest.xml中添加ThirdActivity的action和category的过滤器:

1         <activity 
2             android:name=".ThirdActivity">
3             <intent-filter>
4                  <action android:name="com.example.smyh006intent01.MY_ACTION"/>
5                  <category android:name="android.intent.category.DEFAULT" />
6             </intent-filter>            
7         </activity> 

那时,运转程序,当点击MainActivity中的按钮时,弹出如下界面:

宗教活动 3

信任大家收看了这几个界面,应该就一目了解了。于是我们得以做出如下总计:

在自定义动作时,使用activity组件时,必须添加贰个私下认可的品种

现实的落到实处为:

<intent-filter>

               <action
android:name=”com.example.action.MY_ACTION”/>

               <category
android:name=”android.intent.category.DEFAULT”/>

</intent-filter>

假如有多少个零件被匹配成功,就会以对话框列表的主意让用户展开分选。

每种Intent中不得不钦赐三个action,但却能钦赐多少个category;连串更加多,动作越具体,意图越分明(类似于相亲时,给对方提了无数渴求)。

脚下大家的Intent中唯有二个私下认可的category,将来得以由此intent.addCategory()方法来落实。修改MainActivity中按钮的点击事件,代码如下:

 1         button1.setOnClickListener(new OnClickListener() {            
 2             @Override
 3             public void onClick(View v) {
 4                 //启动另一个Activity,(通过action属性进行查找)
 5                 Intent intent = new Intent();
 6                 //设置动作(实际action属性就是一个字符串标记而已)
 7                 intent.setAction("com.example.smyh006intent01.MY_ACTION"); //方法:Intent android.content.Intent.setAction(String action)
 8                 intent.addCategory("com.example.smyh006intent01.MY_CATEGORY");
 9                 startActivity(intent);        
10             }
11         });

既然如此在Intent中加进了三个category,那么大家要在清单文件中去表明那些category,不然程序将非常的小概运转。代码如下:

1             android:name=".SecondActivity">
2             <intent-filter>
3                  <action android:name="com.example.smyh006intent01.MY_ACTION"/>
4                  <category android:name="android.intent.category.DEFAULT" />
5                  <category android:name="com.example.smyh006intent01.MY_CATEGORY" />
6             </intent-filter>            
7         </activity>

那时候,点击MainActicity中的按钮,就会跳到SecondActicity中去。

总括如下:

自定义连串: 在Intent添加种类能够添加多少个连串,那就必要被匹配的零件必须同时知足那两个品类,才能匹配成功。操作Activity的时候,尽管没有项目,须加上暗中认可种类

 

肆 、data(数据):表示与动作要控制的数量

  • Data属性是Android要拜访的数额,和action和Category评释情势相同,也是在<intent-filter>中。
  • 四个零部件匹配成功显示优先级高的;
    相同展现列表。

Data是用叁个uri对象来表示的,uri代表数量的地方,属于一种标识符。平日状态下,大家运用action+data属性的重组来讲述多少个意图:做什么

利用隐式Intent,我们不仅能够运转本身程序内的运动,还足以运行其余程序的活动,那使得Android八个应用程序之间的效用共享成为了也许。比如应用程序中必要显示3个网页,没有须求自个儿去达成三个浏览器(事实上也不太大概),而是只供给条用系统的浏览器来开辟那么些网页就行了。

【实例】打开钦点网页:

MainActivity.java中,监听器部分的着力代码如下:

 1         button1.setOnClickListener(new OnClickListener() {            
 2             @Override
 3             public void onClick(View v) {
 4                 Intent intent = new Intent();
 5                 intent.setAction(Intent.ACTION_VIEW);
 6                 Uri data = Uri.parse("http://www.baidu.com");
 7                 intent.setData(data);                
 8                 startActivity(intent);        
 9             }
10         });

当然,上方代码也能够简写成:

1         button1.setOnClickListener(new OnClickListener() {            
2             @Override
3             public void onClick(View v) {
4                 Intent intent = new Intent(Intent.ACTION_VIEW);
5                 intent.setData(Uri.parse("http://www.baidu.com"));                
6                 startActivity(intent);        
7             }
8         });

第4行代码:指定了Intent的action是
Intent.ACTION_VIEW,表示查看的意趣,那是3个Android系统内置的动作;

第6行代码:通过Uri.parse()方法,将2个网址字符串解析成2个Uri对象,再调用intent的setData()方法将以此Uri对象传递进入。

当点击按钮时,将跳到如下界面:

宗教活动 4

此刻,
调用的是系统暗中同意的浏览器,也便是说,只调用了这三个组件。现在只要有八个零部件获得了卓绝,应该是怎么着境况吗?

大家修改修改清单文件中对SecondAcivity的宣示:

1         <activity 
2             android:name=".SecondActivity">
3             <intent-filter>
4                  <action android:name="android.intent.action.VIEW" />
5                  <category android:name="android.intent.category.DEFAULT" />
6                  <data android:scheme="http" android:host="www.baidu.com"/>                 
7             </intent-filter>            
8         </activity>

后天,SecondActivity也匹配成功了,大家运维程序,点击MainActicity的按钮时,弹出如下界面供大家选择:

宗教活动 5

我们能够总计如下:

  • 当Intent匹配成功的零部件有三个时,展现优先级高的机件,借使优先级相同,呈现列表让用户本人选取
  • 预先级从-一千至1000,并且个中一个务必为负的才有效

注:系统暗许的浏览器并不曾做出优先级阐明,其优先级默许为正数。

先行级的布局如下:

在清单文件中修改对SecondAcivity的扬言,即扩充一行代码,通过来android:priority设置优先级,如下:

1         <activity 
2             android:name=".SecondActivity">
3             <intent-filter android:priority="-1">
4                  <action android:name="android.intent.action.VIEW" />
5                  <category android:name="android.intent.category.DEFAULT" />
6                  <data android:scheme="http" android:host="www.baidu.com"/>                                  
7             </intent-filter>            
8         </activity>

注:

Data属性的注脚中要钦点访问数据的Uri和MIME类型。能够在<data>成分中通过有个别性质来设置:

android:scheme、android:path、android:port、android:mimeType、android:host等,通过那些属性来对号入座3个杰出的Uri格式scheme://host:port/path。例如:http://www.google.com。

 

伍 、type(数据类型):对于data范例的勾勒

倘使Intent对象中既包括Uri又富含Type,那么,在<intent-filter>中也必须双方都带有才能透过测试。

Type属性用于明显钦命Data属性的数据类型或MIME类型,不过平常来说,当Intent不点名Data属性时,Type属性才会起成效,不然Android系统将会依照Data属性值来分析数据的品类,所以不要钦命Type属性。

data和type属性一般只需求三个,通过setData方法会把type属性设置为null,相反设置setType方法会把data设置为null,如果想要五个属性同时设置,要动用Intent.setDataAndType()方法。

【职分】:data+type属性的运用
【实例】:播放钦赐路线的mp5文件。

具体如下:

新建筑工程程文件smyh006_Intent02,MainActivity.java中按钮监听事件部分的代码如下:

 1         button.setOnClickListener(new OnClickListener(){
 2             @Override
 3             public void onClick(View v) {
 4                 Intent intent = new Intent();
 5                 intent.setAction(Intent.ACTION_VIEW);
 6                 Uri data = Uri.parse("file:///storage/sdcard0/平凡之路.mp3");
 7                 //设置data+type属性
 8                 intent.setDataAndType(data, "audio/mp3"); //方法:Intent android.content.Intent.setDataAndType(Uri data, String type)
 9                 startActivity(intent);                
10             }            
11         });

代码解释:

第伍行:”file://”表示查找文件,前面再增加本身的国产手提式有线电话机存款和储蓄卡的门路:/storage/sdcard0,再加上具体歌曲的门道。

第8行:设置data+type属性  

运行后,当点击按钮时,效果如下:

宗教活动 6

上方界面中,使用的是Samsung系统私下认可的音乐播放器。

 

陆 、extras(扩充消息):扩充新闻

是其他具有附加音讯的聚众。使用extras能够为组件提供扩张音信,比如,假使要实践“发送电子邮件”这么些

动作,能够将电子邮件的标题、正文等保存在extras里,传给电子邮件发送组件。

 

七 、Flags(标志位):期望以此意图的运营情势

3个程序运维后系统会为这些顺序分配多个task供其选择,其它同3个task里面可以拥有差异应用程序的activity。那么,同二个主次能或不可能具有多个task?那就关乎到加载activity的开行形式,那几个须要单独讲一下。

注:android中一组逻辑上在同步的activity被誉为task,自个儿认为能够知晓成七个activity堆栈。

 

③ 、Activity的起步情势:(面试注意)

Activity有多种运营情势:standard、singleTop、singleTask、singleInstance。可以在AndroidManifest.xml中activity标签的习性android:launchMode中装置该activity的加载方式。

  • standard情势:默许的方式,以这种格局加载时,每当运转一个新的活动,必定会构造贰个新的Activity实例放到再次来到栈(目的task)的栈顶,不管这一个Activity是不是业已存在于重返栈中;
  • singleTop情势:假如一个以singleTop格局运营的activity的实例已经存在于重返桟的桟顶,那么再起步那一个Activity时,不会创建新的实例,而是录取位于栈顶的尤其实例,并且会调用该实例的onNewIntent()方法将Intent对象传递到那么些实例中;

注:假设以singleTop情势运营的activity的3个实例已经存在于再次来到桟中,不过不在桟顶,那么它的一颦一笑和standard方式相同,也会成立多个实例;

  • singleTask形式:那种格局下,每趟运行二个activity时,系统率先会在回来栈中检查是还是不是留存该活动的实例,即使存在,则直接使用该实例,并把这些活动之上的持有活动统统去掉;要是没有察觉就会创立贰个新的运动实例;

  • singleInstance方式:总是在新的天职业中学拉开,并且这一个新的职分中有且只有这多个实例,相当于说被该实例运行的其余activity会自动运维于另1个任务中。当再一次启航该activity的实例时,会重新调用已存在的职责和实例。并且会调用那个实例的onNewIntent()方法,将Intent实例传递到该实例中。和singleTask相同,同权且刻在系统中只会设有2个那样的Activity实例。(singleInstance即单实例)

注:前边三种情势中,每一个应用程序都有和好的归来栈,同一个运动在分裂的回来栈中入栈时,必然是开创了新的实例。而选拔singleInstance情势能够缓解那几个题材,在那种方式下会有3个单身的回来栈来管理那几个活动,不管是哪3个应用程序来访问那一个运动,都公用同贰个回来栈,也就缓解了共享活动实例的题目。(此时能够实现任务之间的切换,而不是单独有些栈中的实例切换)

 

实质上我们不在清单文件中装置,只在代码中经过flag来设置也是足以的,如下:

1         Intent intent = new Intent(MainActivity.this,SecondActivity.class);
2         //相当于singleTask
3         intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
4         startActivity(intent);

 

 

1         Intent intent = new Intent(MainActivity.this,SecondActivity.class);
2         //相当于singleTop
3         intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
4         startActivity(intent);

 

 

③ 、Intent的普遍应用:

① 、打开钦赐网页:(直接复制的地点的代码)

MainActivity.java中,监听器部分的着力代码如下:

 1         button1.setOnClickListener(new OnClickListener() {            
 2             @Override
 3             public void onClick(View v) {
 4                 Intent intent = new Intent();
 5                 intent.setAction(Intent.ACTION_VIEW);//方法:android.content.Intent.Intent(String action)
 6                 Uri data = Uri.parse("http://www.baidu.com");
 7                 intent.setData(data);                
 8                 startActivity(intent);        
 9             }
10         });

自然,上方代码也得以简写成:

1   button1.setOnClickListener(new OnClickListener() {            
2             @Override
3             public void onClick(View v) {
4                 Intent intent = new Intent(Intent.ACTION_VIEW);
5                 intent.setData(Uri.parse("http://www.baidu.com"));                
6                 startActivity(intent);        
7             }
8         });

第4行代码:指定了Intent的action是
Intent.ACTION_VIEW,表示查看的情致,那是3个Android系统内置的动作;

第4行代码:通过Uri.parse()方法,将三个网址字符串解析成三个Uri对象,再调用intent的setData()方法将以此Uri对象传递进入。

抑或可以写成:

1         button1.setOnClickListener(new OnClickListener() {            
2             @Override
3             public void onClick(View v) {
4                 Uri uri = Uri.parse("http://www.baidu.com");
5                 Intent intent = new Intent(Intent.ACTION_VIEW,uri);//方法: android.content.Intent.Intent(String action, Uri uri)        
6                 startActivity(intent);        
7             }
8         });

 

2、打电话:

【方式一】打开拨打电话的界面:

 

1                 Intent intent = new Intent(Intent.ACTION_DIAL);
2                 intent.setData(Uri.parse("tel:10086"));
3                 startActivity(intent);  

运作程序后,点击按钮,显示如下界面:

宗教活动 7

 

【格局二】直接拨打电话:

 

1                 Intent intent = new Intent(Intent.ACTION_CALL);
2                 intent.setData(Uri.parse("tel:10086"));
3                 startActivity(intent);

要利用这么些成效亟须在安排文件中参与权限:(加一行代码)

 

1     <uses-sdk
2         android:minSdkVersion="8"
3         android:targetSdkVersion="16" />
4     <uses-permission android:name="android.permission.CALL_PHONE"/>

 

三 、发送短信:

【方式一】打开发送短信的界面:action+type

 

1         Intent intent = new Intent(Intent.ACTION_VIEW);
2         intent.setType("vnd.android-dir/mms-sms");
3         intent.putExtra("sms_body", "具体短信内容"); //"sms_body"为固定内容
4         startActivity(intent); 

【格局二】打开发短信的界面(同时钦命电话号码):action+data

 

1         Intent intent = new Intent(Intent.ACTION_SENDTO);
2         intent.setData(Uri.parse("smsto:18780260012"));
3         intent.putExtra("sms_body", "具体短信内容"); //"sms_body"为固定内容        
4         startActivity(intent);

肆 、播放钦点路线音乐:action+data+type

 

1         Intent intent = new Intent(Intent.ACTION_VIEW);
2         Uri uri = Uri.parse("file:///storage/sdcard0/平凡之路.mp3"); ////路径也可以写成:"/storage/sdcard0/平凡之路.mp3"
3         intent.setDataAndType(uri, "audio/mp3"); //方法:Intent android.content.Intent.setDataAndType(Uri data, String type)
4         startActivity(intent);

五 、卸载程序:action+data(例如点击按钮,卸载某些应用程序,依照包名来分辨)

注:无论是安装依旧卸载,应用程序是根据包名package来识别的。

 

1         Intent intent = new Intent(Intent.ACTION_DELETE);
2         Uri data = Uri.parse("package:com.example.smyh006intent01");
3         intent.setData(data);
4         startActivity(intent);

六 、安装程序:action+data+type

 

1         Intent intent = new Intent(Intent.ACTION_VIEW);
2         Uri data = Uri.fromFile(new File("/storage/sdcard0/AndroidTest/smyh006_Intent01.apk"));    //路径不能写成:"file:///storage/sdcard0/···"
3         intent.setDataAndType(data, "application/vnd.android.package-archive");  //Type的字符串为固定内容
4         startActivity(intent);

注:第壹行的路线不能够写成:”file:///storage/sdcard0/···”,否则报错如下:

宗教活动 8

难点:通过下边包车型地铁那种措施安装程序,运转时怎么会出错呢?

 

1     //通过指定的action来安装程序
2     public void installClickTwo(View view){
3         Intent intent = new Intent(Intent.ACTION_PACKAGE_ADDED);
4         Uri data = Uri.fromFile(new File("/storage/sdcard0/AndroidTest/smyh006_Intent01.apk"));    //路径不能写成:"file:///storage/sdcard0/···"
5         intent.setData(data);
6         startActivity(intent);
7     }

 

 

 

 

归咎,完整版代码如下:

 

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:paddingBottom="@dimen/activity_vertical_margin"
 6     android:paddingLeft="@dimen/activity_horizontal_margin"
 7     android:paddingRight="@dimen/activity_horizontal_margin"
 8     android:paddingTop="@dimen/activity_vertical_margin"
 9     android:orientation="vertical"
10     tools:context=".MainActivity" >
11     <Button 
12         android:id="@+id/button1_browsePage"
13         android:layout_width="match_parent"
14         android:layout_height="wrap_content"
15         android:onClick="browsePageClick"
16         android:text="打开指定网页"/>   
17     <Button 
18         android:id="@+id/button2_openDialPage"
19         android:layout_width="match_parent"
20         android:layout_height="wrap_content"
21         android:onClick="openDialPageClick"
22         android:text="打开拨号面板"/>
23     <Button 
24         android:id="@+id/button3_dialPhone"
25         android:layout_width="match_parent"
26         android:layout_height="wrap_content"
27         android:onClick="dialPhoneClick"
28         android:text="直接拨打指定号码"/>
29     <Button 
30         android:id="@+id/button4_openMsgPage"
31         android:layout_width="match_parent"
32         android:layout_height="wrap_content"
33         android:onClick="openMsgPageClick"
34         android:text="打开发短信的界面"/>
35     
36     
37      <Button 
38         android:id="@+id/button5_sendMsg"
39         android:layout_width="match_parent"
40         android:layout_height="wrap_content"
41         android:onClick="sendMsgClick"
42         android:text="给指定的人发短信"/>  
43         
44      <Button 
45         android:id="@+id/button6_playMusic"
46         android:layout_width="match_parent"
47         android:layout_height="wrap_content"
48         android:onClick="playMusicClick"
49         android:text="播放指定路径音乐"/>      
50      
51      <Button 
52         android:id="@+id/button7_uninstall"
53         android:layout_width="match_parent"
54         android:layout_height="wrap_content"
55         android:onClick="uninstallClick"
56         android:text="卸载程序"/>    
57      <Button 
58         android:id="@+id/button8_install"
59         android:layout_width="match_parent"
60         android:layout_height="wrap_content"
61         android:onClick="installClick"
62         android:text="安装程序"/>    
63         
64     
65 </LinearLayout>

MainActivity.java代码如下:

 

 1 package com.example.m06intent01;
 2 import java.io.File;
 3 import android.app.Activity;
 4 import android.content.Intent;
 5 import android.net.Uri;
 6 import android.os.Bundle;
 7 import android.view.Menu;
 8 import android.view.View;
 9 public class MainActivity extends Activity {
10     @Override
11     protected void onCreate(Bundle savedInstanceState) {
12         super.onCreate(savedInstanceState);
13         setContentView(R.layout.activity_main);
14     }
15     //打开指定网页
16     public void browsePageClick(View view){
17         Intent intent = new Intent(Intent.ACTION_VIEW);
18         intent.setData(Uri.parse("http://www.baidu.com/"));
19         startActivity(intent);  
20         
21     } 
22     
23     //打开拨号面板
24     public void openDialPageClick(View view){
25         Intent intent = new Intent(Intent.ACTION_DIAL);
26         intent.setData(Uri.parse("tel:10086"));
27         startActivity(intent);        
28     }
29     
30     //直接拨打指定号码
31     public void dialPhoneClick(View view){
32         Intent intent = new Intent(Intent.ACTION_CALL);
33         intent.setData(Uri.parse("tel:10086"));
34         startActivity(intent);        
35     }
36     
37     //打开发短信的界面:action+type
38     public void openMsgPageClick(View view){
39         Intent intent = new Intent(Intent.ACTION_VIEW);
40         intent.setType("vnd.android-dir/mms-sms");
41         intent.putExtra("sms_body", "具体短信内容"); //"sms_body"为固定内容
42         startActivity(intent);        
43     }   
44     
45     //打开发短信的界面(指定电话号码):action+data
46     public void sendMsgClick(View view){
47         Intent intent = new Intent(Intent.ACTION_SENDTO);
48         intent.setData(Uri.parse("smsto:18780260012"));
49         intent.putExtra("sms_body", "具体短信内容"); //"sms_body"为固定内容        
50         startActivity(intent);        
51     }      
52     
53     //播放指定路径音乐
54     public void playMusicClick(View view){
55         Intent intent = new Intent(Intent.ACTION_VIEW);
56         Uri uri = Uri.parse("file:///storage/sdcard0/平凡之路.mp3");  //路径也可以写成:"/storage/sdcard0/平凡之路.mp3"
57         intent.setDataAndType(uri, "audio/mp3"); //方法:Intent android.content.Intent.setDataAndType(Uri data, String type)
58         startActivity(intent);
59     } 
60     
61     //卸载某个应用程序,根据包名来识别
62     public void uninstallClick(View view){
63         Intent intent = new Intent(Intent.ACTION_DELETE);
64         Uri data = Uri.parse("package:com.example.smyh006intent01");
65         intent.setData(data);
66         startActivity(intent);
67     } 
68     
69     //安装某个应用程序,根据apk的文件名来识别
70     public void installClick(View view){
71         Intent intent = new Intent(Intent.ACTION_VIEW);
72         Uri data = Uri.fromFile(new File("/storage/sdcard0/AndroidTest/smyh006_Intent01.apk"));    //路径不能写成:"file:///storage/sdcard0/···"
73         intent.setDataAndType(data, "application/vnd.android.package-archive");  //Type的字符串为固定内容
74         startActivity(intent);
75     }
76     
77     
78     @Override
79     public boolean onCreateOptionsMenu(Menu menu) {
80         // Inflate the menu; this adds items to the action bar if it is present.
81         getMenuInflater().inflate(R.menu.main, menu);
82         return true;
83     }
84     
85 }

运营后,主界面如下:

宗教活动 9

【工程文件】

链接:http://pan.baidu.com/s/1sjFdfvn

密码:qnix

发表评论

电子邮件地址不会被公开。 必填项已用*标注