Android两个注意事项.深入了解Intent和IntentFilter(两)
转载请表明出处:http://blog.csdn.net/u012637501(嵌入式_小J的天空)
Intent对象是一组信息,我们能够通过设置其Action、Data、Category属性来指定启动哪个组件并完毕什么样的动作(包括动作所需的数据)。
所谓显示intent,指的是Intent已经明白了它将要启动哪个组件-通过指定Intent对象的Component属性实现。而隐式intent,
指的是Intent不能确定它将要启动哪个组件(没有指定Component属性)-通过AndroidManifest.xml文件里的Intent Filter来对组件进行筛选来确定启动的组件。
ComponentName comp=new ComponentName(ComponentAttr.this,SecondaryActivity.class);
Intent intent=new Intent();
intent.setComponent(comp);
startActivity(intent);
或者 startActivityForResult(intent,requestCode); //关闭启动的Activity会返回结果
<!-- 被intent启动的activity --><activityandroid:name=".SecondaryActivity"android:label="第二个Activity界面" ><intent-filter><action android:name="action.CRAZYIT_ACTION"/><category android:name="android.intent.category.DEFAULT" /></intent-filter></activity>
博主笔记1:除了上述Intent的setComponent方法,我们还能够利用setClass来指定须要启动的详细组件
显式intent能够通过设置其Component属性实现。而隐式intent就通过Intent Filter来实现。
详细的说就是,我们事先设置好"意图"启动组件的相关信息(intent属性),然后再在其它组件的AndroidManifest.xml文件设置好对应的intent属性。当组件发出"意图"时。Android系统通过查找project文件
AndroidManifest.xml(或者系统级组件)其它组件的<intent-filter/>相关信息来进行匹配。筛选得到满足"意图"条件的组件。
public final String CUSTOME_ACTION="intent.action.CUSTOME_JIANG";//字符串能够随意
Intent intent=new Intent(); //创建一个Intent对象
intent.setAction(ActionAttr.CUSTOME_ACTION); //注意:ActionAttr为我们创建的类
startActivity(intent); //启动一个Activity
Intent intent=new Intent();
intent.setAction(Intent.ACTION_CALL); //当中ACTION_CALL为Intent类的静态成员变量,能够类直接调用
startActivity(intent);
2.使用Action、Category属性开发基本思路
public final String CUSTOME_ACTION="intent.action.CUSTOME_JIANG";//字符串能够随意
public final String CUSTOME_CATEGORY="intent.action.CUSTOME_CATEGORY";//字符串能够随意
Intent intent=new Intent(); //创建一个Intent对象
intent.setAction(ActionAttr.CUSTOME_ACTION); //注意:ActionAttr为我们创建的类
intent.addCategory(ActionAttr.CUSTOME_CATEGORY);
startActivity(intent); //启动一个Activity
Intent intent=new Intent();
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);//返回Home桌面
startActivity(intent); //启动一个Activity
注意:这里无需设置AndroidManifest.xml
<activity
android:name=".SecondaryActivity"
android:label="第二个Activity界面" >
<intent-filter>
<action android:name="intent.action.JIANG_ACTION" />
<category android:name="intent.action.JIANG_CATEGORY" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity
android:name=".ThirdActivity"
android:label="第三个Activity界面" >
<intent-filter>
<action android:name="intent.action.JIANG_ACTION" />
<category android:name="intent.action.JIANG_CATEGORY" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
博主笔记2:实际上。我们在开发包括"意图"的应用程序中,Action属性和Category属性是配合使用的。由于,Android系统会给主动Activity在AndroidManifest.xml中默认一个Action属性和Category属性。即:
3.源码
package com.example.android_intent_2;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class ActionCateAttr extends Activity {//自己定义一个action常量org.crazyit.public final static String CRAZYIT_ACTION="intent.action.JIANG_ACTION";public final static String CRAZYIT_CATEGORY="intent.action.JIANG_CATEGORY";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.first);Button btn=(Button)findViewById(R.id.button);btn.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v) {//创建一个Intent对象Intent intent=new Intent();intent.setAction(ActionCateAttr.CRAZYIT_ACTION); //设置action属性intent.addCategory(ActionCateAttr.CRAZYIT_CATEGORY); //设置category属性startActivity(intent);}});//为btn注冊一个事件监听器对象/*返回桌面按钮*/Button btn1=(Button)findViewById(R.id.home);btn1.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v) {//创建一个Intent对象Intent intent=new Intent();intent.setAction(Intent.ACTION_MAIN); //设置action属性intent.addCategory(Intent.CATEGORY_HOME);//设置category属性startActivity(intent);}});//为btn注冊一个事件监听器对象}
}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.android_intent_2"android:versionCode="1"android:versionName="1.0" ><uses-sdkandroid:minSdkVersion="11"android:targetSdkVersion="14" /><applicationandroid:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" ><activityandroid:name=".ActionCateAttr"android:label="第一个Activity界面" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><activityandroid:name=".SecondaryActivity"android:label="第二个Activity界面" ><intent-filter><action android:name="intent.action.JIANG_ACTION" /><category android:name="intent.action.JIANG_CATEGORY" /><category android:name="android.intent.category.DEFAULT" /></intent-filter></activity><activityandroid:name=".ThirdActivity"android:label="第三个Activity界面" ><intent-filter><action android:name="intent.action.JIANG_ACTION" /><category android:name="intent.action.JIANG_CATEGORY" /><category android:name="android.intent.category.DEFAULT" /></intent-filter></activity></application>
</manifest>
这里须要注意的是,Type属性和Data属性通常会出现相互覆盖的情况,假设希望Intent既有Data属性也有Type属性,必须通过setDataAndType()方法来实现。
这里须要注意的是,Data属性仅仅接受一个Uri对象。一个Uri对象通常通过例如以下形式的字符串来表示:
Intent intent=new Intent(); //创建一个Intent对象
String data="content://com.android.contacts/contacts/1";
Uri uri=Uri.parse(data); //将字符串转换为Uri
intent.setAction(Intent.ACTION_VIEW); //设置Intent对象Action属性
intent.setData(uri); //设置Intent对象Data属性
startActivity(intent);
或者
Intent intent=new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse("content://com.android.contacts/contacts/1"));
startActivity(intent);
在Android中读取电话信息时,要注意增加
<use-permission android:name="android.permission.READ_CONTACTS"/>
在android中使用BroadcastReceiver时
<use-permission android:name="android.permission.RECEIVE_SMS"/>
在android中使用有关的文件下载功能时,要使用到的
<use-permission android:name="android.permission.INTERNET"/>
<use-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
package com.android.android_intent_4;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/*第一个按键功能:打开网页*/
Button btn1=(Button)findViewById(R.id.button1);
btn1.setOnClickListener(new OnClickListener(){ //为按钮1注冊一个事件监听器对象 @Override
public void onClick(View v) {
//1.创建Intent
Intent intent=new Intent();
//2.设置action、data属性
String data="http://www.baidu.com";
Uri uri=Uri.parse(data); //将字符串转化为Uri-通用资源标识
intent.setAction(Intent.ACTION_VIEW); //设置intent属性为系统提前定义的Intent.ACTION_VIEW
intent.setData(uri); //为intent设置数据属性。用于传递数据
//3.启动Activity
startActivity(intent);
}}); /*第二个按键功能:编辑标识为1的联系人*/
Button btn2=(Button)findViewById(R.id.button2);
btn2.setOnClickListener(new OnClickListener(){ //为按钮1注冊一个事件监听器对象 @Override
public void onClick(View v) {
//1.创建Intent
Intent intent=new Intent();
//2.设置action、data属性
intent.setAction(Intent.ACTION_EDIT); //设置intent属性为系统提前定义的Intent.ACTION_VIEW
intent.setData(Uri.parse("content://com.android.contacts/contacts/1")); //为intent设置数据属性。依据指定的字符解析出Uri对象
//3.启动Activity
startActivity(intent);
}}); /*第三个按键功能:拨打电话18819465188*/
Button btn3=(Button)findViewById(R.id.button3);
btn3.setOnClickListener(new OnClickListener(){ //为按钮1注冊一个事件监听器对象
@Override
public void onClick(View v) {
//1.创建Intent
Intent intent=new Intent();
//2.设置action、data属性
intent.setAction(Intent.ACTION_DIAL); //设置intent属性为系统提前定义的Intent.ACTION_VIEW
intent.setData(Uri.parse("tel:18819465188")); //依据指定的字符解析出Uri对象
//3.启动Activity
startActivity(intent);
}});
} }
Intent intent=new Intent(); //创建一个Intent对象
String data="lee://www.fkjava.org:8888/mypath";
Uri uri=Uri.parse(data); //将字符串转换为Uri
intent.setAction(Intent.ACTION_VIEW);
intent.setData(uri); //设置Intent对象Data属性
startActivity(intent);
或者
Intent intent=new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse("lee://www.fkjava.org:8888/mypath"));
startActivity(intent);
<data android:mimeType=""android:host=""android:port=""android:path=""android:pathPrefix=""android:pathPattern=""/>
版权声明:本文博主原创文章。博客,未经同意不得转载。
Android两个注意事项.深入了解Intent和IntentFilter(两)相关推荐
- Android开发精要3--Android中的Intent机制
1.概述 一个应用程序的三个核心组件--activities.services.broadcastreceivers,都是通过叫做intents的消息激活.Intent消息是一种同一或不同应用程序中的 ...
- Android的Intent和IntentFilter应用说明一例
很多人对文档中的Intent和IntentFilter不理解是什么意思,我这里举例解释下. Intent字面意思就是目标,目的.通俗一点,需要达成某些目标,则需要提供一些动作,这些目标的分类,以及达成 ...
- 【Android游戏开发之五】游戏注册界面Demo-实现两个Activity之间的切换与数据交互!...
今天讲下在Surfaceview中如何实现两个或者多个Activity之间的切换与数据交互,为了更形象一些我做了一个游戏登录界面的demo,其中对于输入界面的布局这些我也是随意写了下,主要是实现功能并 ...
- Android中的Intent和Intent-filter总结
一.相关概念 (一)基本概念 Intent中文意思指"意图",按照Android的设计理念,Android使用Intent来封装程序的"调用意图",不管启动Ac ...
- android Intent和IntentFilter
android的应用程序包含三种重要的组件:Activity.Service.BroadcastReceiver,应用程序采用一致的方式来启动他们--都是依靠Intent来进行启动.Intent就封装 ...
- android友盟注意事项
android友盟注意事项: activity要在onResume中添加: MobclickAgent.onResume(Context); onPause中添加 MobclickAgent.onPa ...
- Android学习笔记——APP页面转换与Intent学习
使用Intent保证多活动之间的切换,实现APP页面转换. 同时学习Intent其他诸多功能. 认知Intent Intent是Android程序中各组件之间进行交互的一种重要方式,不仅指明当前组件想 ...
- android 多个dialog 交替显示,Android如何在一个AlertDialog中一个接一个地显示两个ListViews...
我有两个列表.一个列表显示可用列表中的所有可用项目(lv_available_items)和仅次要项目(lv_selected_items).我还希望该选定列表最多占用显示的50%,因此我使用属性&q ...
- CTS(23) --- Android 8.1GMS注意事项
Android 8.1GMS注意事项 GMS认证软件的注意事项: 1.开机画面" Powered by android go edition" 到底边距离应等于或稍大于" ...
最新文章
- 【敏捷测试】一个测试人员在参与敏捷测试的经验分享(3)
- boost::reference_wrapper用法实例
- Spring的IOC原理
- Windows下64位Apache服务器的安装
- pythondd_windows7下安装python环境和django
- 2017,三大运营商的天猫芳华
- JavaScript基本语法2
- angular封装七牛云图片上传,解决同一页面多个上传按钮分别上传
- 工程、通信中的3dB带宽含义
- 传奇客户端传奇新手普及讲解各补丁说明
- WC2020 打铁记
- flink任务优化总结
- 基于js的火星坐标、百度坐标、WGS84坐标转换
- 巴西龟饲养日志----冬眠苏醒
- 台式电脑 计算机管理在哪里,设备管理器在哪 怎么打开设备管理器?
- Python在线聊天
- VS粘贴word时中文乱码修复工具v1
- vue2移动端仿淘宝APP省市区街道四级地区选择器
- 九月十月百度人搜,阿里巴巴,腾讯华为小米搜狗笔试面试六十题 10 12
- 计算机分类汇总图片,只用文件夹目录,一个图文创作者如何快速整理大量照片...
热门文章
- Java作业08 计科1501 闫国雨
- 【matlab】将matlab中数据输出保存为txt或dat格式
- linux(fedora) 下dvwa 建筑环境
- Handler与多线程
- 关于VS2010帮助文档的使用和VC6.0在Win7 64位下的使用
- android中AsyncTask和Handler对比
- java如何添加同名的xml节点_jaxb怎么解析多个同名元素
- STM32安装Keil5、芯片支持包、startup启动文件(启动过程分析)、建立工程、烧写
- 全国计算机等级考试题库二级C操作题100套(第46套)
- java定时器_拾遗Timer定时器