- 浏览: 466958 次
- 性别:
- 来自: 深圳
-
文章分类
最新评论
-
wwwjiandan:
我现在遇到的问题是将Activity设置为非全屏,且andro ...
Android中软键盘弹出时底部菜单上移问题 -
zjhdreams:
求下载链接
Android 9Patch (NinePatch) -
wtjandjay:
受教了 .......
从程序员到项目经理 -
mr_zhang2011:
将博客搬至CSDN -
fyc0109:
为什么我传过去的值, 有的都不对呢, 顺序也是一样的.就是获得 ...
Android Parcelable序列化自定义类集合在Activity间传递
Android开发技术交流群86686524 (已满)请加120059404
在这里你将会学到:
- 什么是Intent和Intent Filter
- Intent和Intent Filter有什么用
- 怎么启动(传递)一个Intent
- Intent里包含什么
- 什么是显式Intent以及什么隐式Intent
- Intent是怎样匹配的
一:前言
在正式介绍Intent之前,我们先看下上面说的Activity、Service和Broadcast Receiver是怎样传递Intent。对于这三个组件而言,他们都有自己独立的传递Intent的机制:
- Activity:对于Activity来说,它主要是通过Context.startActivity() 或Activity.startActivityForRestult() 来启动一个存在的Activity做一些事情。当使用Activity.startActivityForResult() 启动一个Activity时,可以使用Activity.setResult()返回一些结果信息,可以在Activity.onActivityResult() 中得到返回的结果.
- Service:对于Service来说,它主要是通过Context.startService() 初始化一个Service或者传递消息给正在运行的Service。同样,也可以通过Context.bindService() 建立一个调用组件和目标服务之间的连接。
- Broadcast Receiver:我们可以通过 Context.sendBroadcast() , Context.sendOrderedBroadcast() 以及 Context.sendStickyBroadcast() 这些方法,传递Intent给感兴趣的广播。
消息之间的传递是没有重叠的,比如调用startActivity()传播一个Intent,只会传播给Activity,而不会传播给Service和Broadcast Receiver,反过来也是这样的。
二:Intent对象
一个Intent对象包含了很多数据的信息,比如要执行的动作,类别,数据,附加信息等等,下面就一一列列出一个Intent中包含的信息。
组件名称
这个组件名称字段其实就是一个ComponentName类,它包含了一个目标组件的全限定名,比如com.flysnow.intent.Activity1,这就是一个全限定名的Activity。组件名字可以通过setComponent()、setClass()或者setClassName()设置,如果设置了Intent目标组件的名字,那么这个Intent就会被传递给特定的组件,也就是我们说的显式Intent.如果不设置,则是隐式的Intent,Android系统将根据Intent Filter中的信息进行匹配.
Action(动作)
一个Intent的Action在很大程度上说明这个Intent要做什么,是查看(View)、删除(Delete)、编辑(Edit)等等。Action一个字符串命名的动作,Android中预定义了很多Action,可以参考Intent类查看,下面是文档中的几个动作
当然,我们也可以自定义Action,比如com.flysnow.intent.ACTION_ADD,定义Action的时候最好能表明意思,要做什么,这样我们的Intent中的数据才好填充。Intent对象的getAction()可以获取动作,使用setAction()可以设置动作。
Data(数据)
Data,其实就是一个URI,用于执行一个Action时所用到的数据的URI和MIME。不同的Action有不同的数据规格,比如ACTION_EDIT动作,数据就可以能包含一个用于编辑文档的URI,如果是一个ACTION_CALL动作,那么数据就是一个包含了tel:6546541的数据字段,所以上面提到的自定义Action时要规范命名。数据的URI和类型对于Intent的匹配是很重要的,Android往往根据数据的URI和MIME找到能处理该Intent的最佳目标组件。
Category(类别)
Category指定了用于处理Intent的组件的类型信息,一个Intent可以添加多个Category,使用addCategory()方法即可,使用removeCategory()删除一个已经添加的类别。Android的Intent类里定义了很多常用的类别,可以参考使用。
Extras(附加信息)
有些用于处理Intent的目标组件需要一些额外的信息,那么就可以通过Intent的put..()方法把额外的信息塞入到Intent对象中,用于目标组件的使用,一个附件信息就是一个key-value的键值对..Intent有一系列的put和get方法用于处理附加信息的塞入和取出。
Flag(标识)
Android有很多标识,用于标记如何启动一个活动,是NEW_TASK还是其他等等,以及启动后怎么对待这个活动。。可以参考Intent类中的FLAG常量字段。
三:Intent的解析
介绍完了Intent对象的构成,就要介绍Android系统是怎样解析Intent的,Android是怎么传递Intent到目标组件的呢?
Intent分类
Intent可以分为两类,一类是显式的Intent,一类是隐式的Intent,上面有过提及。显示的Intent就是指定了组件名字的,隐式的就是没有指定Intent的组件名字,需要Android根据Intent中的Action、data、Category等来解析匹配。而目标组件(Activity、Service、Broadcast Receiver)怎通过设置他们的Intent Filter来界定其处理的Intent。如果一个组件没有定义Intent Filter,那么它只能接受处理显示的Intent,只有定义了Intent Filter的组件才能同时处理隐式和显示的Intent。
Action检测
为了对Action的作用进行检测,我们使用一个例子来演示Action的作用。项目名为Intents,应用名为Intents and Filters,运行在Android2.2版本上.主启动Activity为IntentsTestList
-
IntentsTestList代码如下:
Java代码/**
* Intents测试列表类
* @author 飞雪无情
* @since 2011-3-14
*/
public class IntentsTestList extends ListActivity {
private String ACTION_VIEW="com.flysnow.intent.ACTION_VIEW";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//定义ListAdapter
setListAdapter(new SimpleAdapter(this, getData(),
android.R.layout.simple_list_item_1, new String[] { "title" },new int[] {android.R.id.text1}));
getListView().setTextFilterEnabled(true);
//注册一个广播
super.registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "该Broadcast的Intent Filter值只设置了Action", Toast.LENGTH_SHORT).show();
}
},new IntentFilter(ACTION_VIEW));
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
Intent intent=(Intent)getData().get(position).get("intent");
Boolean isActivity=(Boolean)getData().get(position).get("isActivity");
if(isActivity){
startActivity(intent);
}else{
sendBroadcast(intent);
}
}
/**
* 返回ListView需要的数据
* @return ListView需要的数据
*/
private List<Map<String,Object>> getData() {
List<Map<String,Object>> data=new ArrayList<Map<String,Object>>();
addItem(data, "空Action的Activity", new Intent(),true);
addItem(data, "Action检测-Activity", new Intent(ACTION_VIEW),true);
addItem(data, "Action检测-Broadcast", new Intent(ACTION_VIEW),false);
return data;
}
/**
* 给ListView添加数据
* @param data 存储数据的List
* @param name 要显示的Title
* @param intent 单击某一项时要启动的Activity
* @param isActivity 启动的是否是Activity,true是,false为广播
*/
private void addItem(List<Map<String,Object>> data, String name, Intent intent,boolean isActivity) {
Map<String, Object> temp = new HashMap<String, Object>();
temp.put("title", name);
temp.put("intent", intent);
temp.put("isActivity", isActivity);
data.add(temp);
}
} - startActivity(intent);或者sendBroadcast(intent);找到Androidmanifest.xml里对应的intent
-
为了测试startActivity(),我们新建一个Activity名字为ActionActivity代码如下:
Java代码/** * @author 飞雪无情 * @since 2011-3-14 */ public class ActionActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TextView text=new TextView(this); text.setText("该Activity的Intent Filter值只设置了Action"); setContentView(text); } }
很简单,只有一段文本的展示。 -
AndroidManifest.xml修改如下:
Xml代码 <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.flysnow.intent"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="8" />
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".IntentsTestList"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".ActionActivity" android:label="Action检测">
<intent-filter>
<action android:name="com.flysnow.intent.ACTION_VIEW"></action>
<action android:name="android.intent.action.VIEW"></action>
<category android:name="android.intent.category.DEFAULT"></category>
</intent-filter>
</activity>
</application>
</manifest> - 运行入下图:
当点击“空Action的Activity”的时候,会报异常,因为Intent什么都没有设置,没有任何的Activity能处理它 。当点击“Action检测-Activity”的时候会打开我们的ActionActivity这个Activity,点击“Action检测-Broadcast”会弹出Toast提示,说明已经被接收到。。从上面我们可以看出,当Intent设置了Action时,只要对应的组件的Intent Filter中包含该Action的定义,那么这个组件就会接收该Intent。。。 -
Category(类别)检测
类别在<intent-filter>中是通过<category>标记定义的,Category和Action一样,他们的名字都是一个字符串定义,但是我们在代码中可以使用对应的类别常量,在xml文件定义中只能使用定义好的字符串。Android的Intent类中提供了很多内置的类别定义,一中类别代表一个意思,可以参考说明使用。。比如android.intent.category.LAUNCHER标表示你的应用会展示在启动列表页面,经常和android.intent.action.MAIN搭配使用
下面通过一个例子来说明Category的检测,项目名为Intents,应用名为Intents and Filters,运行在Android2.2版本上.主启动Activity为IntentsTestList。
-
IntentsTestList代码如下:
/** * Intents测试列表类 * @author 飞雪无情 * @since 2011-3-14 */ public class IntentsTestList extends ListActivity { private String ACTION_VIEW="com.flysnow.intent.ACTION_VIEW"; private String CATEGORY_MAN="com.flysnow.intent.CATEGORY_MAN"; private String CATEGORY_SHOP="com.flysnow.intent.CATEGORY_SHOP"; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //定义ListAdapter setListAdapter(new SimpleAdapter(this, getData(), android.R.layout.simple_list_item_1, new String[] { "title" },new int[] {android.R.id.text1})); getListView().setTextFilterEnabled(true); filter.addCategory(CATEGORY_MAN); //注册一个广播 super.registerReceiver(new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "该Broadcast的Intent Filter设置了Category和Action", Toast.LENGTH_SHORT).show(); } },filter); } @Override protected void onListItemClick(ListView l, View v, int position, long id) { Intent intent=(Intent)getData().get(position).get("intent"); Boolean isActivity=(Boolean)getData().get(position).get("isActivity"); if(isActivity){ startActivity(intent); }else{ sendBroadcast(intent); } } /** * 返回ListView需要的数据 * @return ListView需要的数据 */ private List<Map<String,Object>> getData() { List<Map<String,Object>> data=new ArrayList<Map<String,Object>>(); addItem(data, "1个Category检测-Activity", new Intent(ACTION_VIEW).addCategory(CATEGORY_MAN),true); addItem(data, "1个Category检测-Broadcast", new Intent(ACTION_VIEW).addCategory(CATEGORY_MAN),false); addItem(data, "2个Category检测-Activity", new Intent(ACTION_VIEW).addCategory(CATEGORY_MAN).addCategory(CATEGORY_SHOP),true); return data; } /** * 给ListView添加数据 * @param data 存储数据的List * @param name 要显示的Title * @param intent 单击某一项时要启动的Activity * @param isActivity 启动的是否是Activity,true是,false为广播 */ private void addItem(List<Map<String,Object>> data, String name, Intent intent,boolean isActivity) { Map<String, Object> temp = new HashMap<String, Object>(); temp.put("title", name); temp.put("intent", intent); temp.put("isActivity", isActivity); data.add(temp); } private IntentFilter filter=new IntentFilter(ACTION_VIEW); }
以上代码主要是一个ListView,列出了三个测试项,1个Category的测试和2个Category的测试,注册了一个广播. -
为了测试新建了2个Activity,分别是CategoryActivity和Category2Activity,代码如下:
/**
* @author 飞雪无情
* @since 2011-3-14
*/
public class CategoryActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView text=new TextView(this);
text.setText("该Activity的Intent Filter值设置了Action和1个Category,不包含android.intent.category.DEFAULT");
setContentView(text);
}
}/**
* @author 飞雪无情
* @since 2011-3-14
*/
public class Category2Activity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView text=new TextView(this);
text.setText("该Activity的Intent Filter值设置了Action和2个Category,不包含android.intent.category.DEFAULT");
setContentView(text);
}
} -
AndroidManiftest.xml修改如下:
Xml代码 <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.flysnow.intent"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="8" />
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".IntentsTestList"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".CategoryActivity" android:label="1个Category检测">
<intent-filter>
<action android:name="com.flysnow.intent.ACTION_VIEW"></action>
<category android:name="android.intent.category.DEFAULT"></category>
<category android:name="com.flysnow.intent.CATEGORY_MAN"></category>
</intent-filter>
</activity>
<activity android:name=".Category2Activity" android:label="2个Category检测">
<intent-filter>
<action android:name="com.flysnow.intent.ACTION_VIEW"></action>
<category android:name="android.intent.category.DEFAULT"></category>
<category android:name="com.flysnow.intent.CATEGORY_MAN"></category>
<category android:name="com.flysnow.intent.CATEGORY_SHOP"></category>
</intent-filter>
</activity>
</application>
</manifest> - 我们运行测试,效果图如下:
当点击“1个Category检测-Activity”的时候,会弹出
这是,因为我们的Intent定义了一个Category,这个Category在CategoryActivity和Category2Activity里都有,都能匹配上,所以就会弹出这两个Activity供我们选择,而当我们单击《2个Category检测-Activity》的时候就会直接打开Category2Activity,这是因为这个选项里的Intent有2个Category,只有Category2Activity才能匹配上。。。通过例子我们可以总结到:Intent中所包含的所有Category必须在一个组件的intent-filter中有定义,一个都不能少,否则不能通过检测。。但是intent-filter的可以有额外的Category .再次提醒: Android对所有传递给 Context.startActivity()的隐式intent至少包含"android.intent.category.DEFAULT" -
数据(data)检测
data标记也是在intent-filter中定义的,大致格式如下:
Xml代码<intent-filter> <action android:name="android.intent.action.VIEW"></action> <category android:name="android.intent.category.DEFAULT"></category> <data android:mimeType="text/plain"></data> </intent-filter>
每个data定义一个URI和数据类型(MIME),URI由4个属性来定义,分别是android:scheme,android:host,android:port,android:path..这个四个属性构成如下格式的URI: scheme://host:port/path 如:content://com.flysnow.intent:8080/show/view。其中content就是scheme,com.flysnow.intent就是host,8080就是port,show/view就是path...如果有经常使用ContentProvider的应该熟悉。。我们经常定义的authority不就是host+port吗?还有这几个元素都是可选的,但是不是随便用就可以的,port要依赖于host,没有host,port就会被忽略,不起作用,同样,如果要使用host+port(authority)就必须指定scheme。而path则依赖于scheme和authority。。
还有一个很重要的类型就是mimeType,这个属性用于指定内容的类型,也就是这个组件可以处理哪些类型的内容。。如text/plain表示无格式文本类型,mimeType也支持通配符,使用text/*则表示所有文本类型。通过使用它,你可以很方便的开发出关联打开诸如txt文件,pdf文件的应用。后面的两个自理将会演示txt文件查看器,图片查看器的例子。。MIME可以参考http://www.w3school.com.cn/media/media_mimeref.asp。这里有所有的内容类型的定义。。
开发实例-拨打电话,text阅读器和图片查看器
下面通过一个例子来演示data的检测,项目名为Intents,应用名为Intents and Filters,运行在Android2.2版本上.主启动Activity为IntentsTestList。例子包括以下演示:
- 通过发送intent的方式“打开拨号界面并输入电话123456”。
- 创建一个Text文件阅读器
- 创建一个图片查看器
首先我们实现第一项,修改IntentsTestList类如下:
/** * Intents测试列表类 * @author 飞雪无情 * @since 2011-3-14 */ public class IntentsTestList extends ListActivity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //定义ListAdapter setListAdapter(new SimpleAdapter(this, getData(), android.R.layout.simple_list_item_1, new String[] { "title" },new int[] {android.R.id.text1})); getListView().setTextFilterEnabled(true); } @Override protected void onListItemClick(ListView l, View v, int position, long id) { Intent intent=(Intent)getData().get(position).get("intent"); Boolean isActivity=(Boolean)getData().get(position).get("isActivity"); if(isActivity){ startActivity(intent); }else{ sendBroadcast(intent); } } /** * 返回ListView需要的数据 * @return ListView需要的数据 */ private List<Map<String,Object>> getData() { List<Map<String,Object>> data=new ArrayList<Map<String,Object>>(); addItem(data, "打开拨号界面并输入电话123456", new Intent(Intent.ACTION_DIAL, Uri.parse("tel://123456")), true); return data; } /** * 给ListView添加数据 * @param data 存储数据的List * @param name 要显示的Title * @param intent 单击某一项时要启动的Activity * @param isActivity 启动的是否是Activity,true是,false为广播 */ private void addItem(List<Map<String,Object>> data, String name, Intent intent,boolean isActivity) { Map<String, Object> temp = new HashMap<String, Object>(); temp.put("title", name); temp.put("intent", intent); temp.put("isActivity", isActivity); data.add(temp); } }
这时我们运行程序,单击“打开拨号界面并输入电话123456”就会打开系统的自带的拨号界面,并且默认已经录入了要拨打的号码“123456”。效果图如下:
然后我们实现第二功能-txt文件阅读器
新建TextWatcherActivity代码如下:
/** * 显示文本的Activity * @author 飞雪无情 * @since 2011-3-24 */ public class TextWatcherActivity extends Activity { private TextView mTextView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mTextView=new TextView(this); setContentView(mTextView); } @Override protected void onStart() { super.onStart(); Intent txtIntent=getIntent(); Uri data=txtIntent.getData(); String txt; try { txt = readTxt(data); } catch (IOException e) { txt="打开txt文件异常"; } mTextView.setText(txt); } /** * 读取txt文本 * @param txtUri * @return * @throws IOException */ private String readTxt(Uri txtUri) throws IOException{ BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(getContentResolver().openInputStream(txtUri),Charset.forName("GBK"))); StringBuilder txt=new StringBuilder(); String buf=""; while((buf=bufferedReader.readLine())!=null){ txt.append(buf).append("\n"); } return txt.toString(); } }
然后在AndroidManifest.xml中加入如下定义:
<activity android:name=".TextWatcherActivity" android:label="查看TXT文件"> <intent-filter> <action android:name="android.intent.action.VIEW"></action> <category android:name="android.intent.category.DEFAULT"></category> <data android:mimeType="text/plain"></data> </intent-filter> </activity>
这样在单击txt文件的时候就可以选择我们的这个Activity对txt文件处理,显示其内容.我们新建一个1.txt文件,写上一些内容,放在我们的sd卡中,使用要在android模拟器上安装一个文件管理工具查看这个sdcard里的txt文件,会弹出如下图的提示,看到我们刚刚做的《TXT阅读器》了吧。
选择“查看TXT文件”,就可以看到我们的txt内容:
最后实现第三个功能--图片查看器
新建ImageWatcherActivity,代码如下:
/** * 显示文本的Activity * @author 飞雪无情 * @since 2011-3-24 */ public class ImageWatcherActivity extends Activity { private final String IMAGE_URI_KEY="imageUriKey"; private Uri image; private ImageView mImageView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mImageView=new ImageView(this); setContentView(mImageView); } @Override protected void onStart() { super.onStart(); Intent txtIntent=getIntent(); image=txtIntent.getData(); //对于大图片未做优化处理 mImageView.setImageURI(image); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); image=savedInstanceState.getParcelable(IMAGE_URI_KEY); mImageView.setImageURI(image); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putParcelable(IMAGE_URI_KEY,image); } }
然后在AndroidManifest.xml中加入如下定义:
<activity android:name=".ImageWatcherActivity" android:label="查看图片文件"> <intent-filter> <action android:name="android.intent.action.VIEW"></action> <category android:name="android.intent.category.DEFAULT"></category> <data android:mimeType="image/*"></data> </intent-filter> </activity>
这样在单击图片文件的时候就可以选择我们的这个Activity对txt文件处理并且显示。
数据(data)检测小结
对于data的匹配,如果说怎么怎么匹配,在什么情况下通过可能会比较难以理解,这里以一种简单的方式来解说。
假定我们定义的Intent Filter 的data标签为集合A,传递的Intent中包含的data为集合B,当B是A的子集时就通过了(Action和Category也得检测通过)。如果B为空(不配置data),那么A也得为空(不配置data)才能通过 。更详细(繁琐)的介绍请参考doc
Intents and Intent Filters总结
Android提供了以Intent的方式调用Android设备的内置Google应用,比如打电话,调用Google浏览器打开网页,搜索等。关于这方便的介绍可以参考Android开发文档《Intents List: Invoking Google Applications on Android Devices》这一节的介绍,很详细。docs/guide/appendix/g-app-intents.html。
Intent是一个很好的设计,它提供了一种在各个组建之间通信的方式,也为我们使用其他的应用的功能提供了可能,这样如果我们想在自己的应用打开一个网页,我们就不用特意迁入一个webview,我们直接调用Android内的浏览器打开即可。。
最后值得一提的是PackageManager这个类中为我们提供了一系列的query...()方法,可以让我们根据我们定义的Intent查询特定的匹配Intent Filter标记的所有组件。。有兴趣的可以研究一下。。
-
IntentsTestList代码如下:
-
三个程序代码见附件
发表评论
-
android Log.isLoggable方法的使用
2014-06-06 15:35 3016android 动态控制logcat日志开关,通过Log. ... -
View not attached to window manager
2013-01-10 11:55 1086View not attached to window man ... -
代码设置android:icon,android:label
2013-01-05 15:26 8010requestWindowFeature( Window.F ... -
Android项目为一个apk设置多个ICON图标和执行入口
2013-01-05 12:13 3888Android开发中,一个工程对应一个AndroidManif ... -
Intent跳转到系统应用中的拨号界面、联系人界面、短信界面及其他
2012-12-04 12:15 01:调用系统发送短信界面 Uri smsT ... -
Android 源码目录结构详解
2012-11-22 17:20 1500这是Android2.1的源代码的 ... -
如何获取android源代码
2012-07-10 17:50 2746如何获取android源代码 研究 ... -
Android uses-permission大全
2012-06-12 17:33 1082android.permission.ACCESS_CHE ... -
Android 应用程序基础(Application Fundamentals)
2012-05-23 17:42 1291Android 应用程序基础(Application Fun ... -
转Android 音乐频谱实现
2012-02-18 23:35 0最近由于需要实现音乐频谱,所以今天就为大家普及一下。 这里实现 ... -
android VideoView本工程mp4文件
2012-01-09 18:42 2716最近在做一个demo,要求播放视频,记录一下。使用的是Vid ... -
关于android播放mp3与歌词同步问题收集
2012-01-09 17:57 1712关于android播放mp3与歌词同步问题收集,有时间再试。 ... -
android使用MediaPlayer播放音乐文件时遇到的问题
2012-01-09 17:38 18405把mp3文件放在Assets文件夹里,然后用MediaPlay ... -
android资源目录---assets与res/raw的不同
2012-01-05 11:49 2401android资源目录---assets与 ... -
Android 的cpu硬盘 内存 网络设置 系统信息 硬件信息
2012-01-04 10:56 1638转载 http://www.cnmsdn.com/html/2 ... -
使用 Android Compatibility Package 来简化开发工作
2012-01-04 10:12 1442转载 http://www.cnmsdn.com/html/2 ... -
Android 9Patch (NinePatch)
2011-12-26 16:06 45451:介绍 NinePatch图片以*.9.png结尾,和普通 ... -
Windows平台下Android源码的下载
2011-12-21 11:06 1269Windows平台下Android源码的下载 ... -
改变MenuItem默认背景
2011-12-07 19:58 1452@Override public boolean onCre ... -
Android横屏竖屏切换
2011-11-10 18:20 107转载 http://blog.csdn.net/leesido ...
相关推荐
Android Intents and Intent Filters(二)源代码 对应博客 http://blog.csdn.net/michael__li/article/details/6950127
Android Intents and Intent Filters(一) 对应博客地址:http://blog.csdn.net/michael__li/article/details/6947545
内含四个pdf文件,分别为 Intent and Intent-filter Intents and Intent Filters理论英文 Intents and Intent Filters理论中文 Intent入门指南 详尽介绍关于android intent
在Android开发中,Intent和Intent Filters是两个至关重要的概念,它们是应用程序之间通信的主要桥梁,也是实现外部调用的关键机制。下面将详细讲解Intent和Intent Filters的工作原理以及如何使用它们来实现外部调用...
**Filters and Security** Intent Filter不仅用于组件间通信的匹配,还涉及到安全控制。组件只能接收声明在Intent Filter中的Intent,否则系统会阻止。这对于防止恶意代码误操作其他组件至关重要。 **常见情况与...
总之,Intent和Intent Filters是Android系统的核心组成部分,它们使得不同应用间的交互变得简单而灵活。通过正确配置Intent Filter,开发者可以让自己的应用能够响应特定的Intent,从而实现各种功能,如拨打电话、...
### Android开发之旅:深入理解Intents与Intent Filters 在Android应用开发中,Intents与Intent Filters扮演着极其关键的角色,它们使得应用间的通信成为可能,从而打破了应用沙盒的隔离状态,实现了应用间的互动与...
### Android开发之旅:深入理解Intents与Intent Filters 在Android开发中,`Intents`与`Intent Filters`是实现组件间通信的关键技术。通过这两项技术,开发者可以让应用程序中的不同组件,甚至不同的应用程序之间...
#### 十三、意图和意图过滤器(Intents and Intent Filters) 意图(Intent)用于在组件之间传递消息和数据,而意图过滤器(Intent Filters)则用于定义组件对哪些类型的Intent感兴趣。 #### 十四、数据存储(Data Storage...
6. **Intent Filters**:在AndroidManifest.xml中,通过intent-filter标签定义组件能响应哪些Intent,包括Action、Category和Data,使得其他应用可以通过隐式Intent调用组件。 7. **startActivity()** 和 **...
2. **配置Intent Filters**:为了能够通过Intent启动该Activity,需要在AndroidManifest.xml中为每个Tab对应的Activity配置Intent Filters。 3. **发送Intent**:在启动Activity时,通过Intent指定要显示的Tab。 ##...
从显式 Intents 到隐式 Intents,再到 Intent Filters 的定义,我们逐步掌握了如何在 Android 应用程序中有效地进行 Activity 之间的跳转和数据传输。同时,也了解了如何通过 URI 启动 Activity 以及如何在 Tabbed ...
- **Intent Filters**: 定义组件对外提供的功能和服务类型。 #### 五、活动与任务 **5.1 活动(Activity)** - Activity是用户与应用程序交互的主要方式之一。 - Activity可以通过Intent启动,并且可以在栈中进行...
4. **Intent Filters**: Android使用Intent来处理NFC事件,开发者可以通过定义特定的Intent Filter来响应NFC标签的发现和读写操作。 ### 三、NFC应用开发 1. **开启和关闭NFC**: 开发者可以通过`NfcAdapter`的`...
#### 五、意图和意图过滤器 - Intents and Intent Filters **1. 意图过滤器 - Intent Filters** - **意图过滤器**: Intent 过滤器定义了组件可以响应哪些 Intent 类型。这是通过在 AndroidManifest.xml 文件中声明...
- **Intent 过滤器 - Intent Filters** - Intent 过滤器定义了一个组件能够响应的 Intent 类型。在 manifest 文件中,每个组件都可以有一个或多个 Intent 过滤器。 - Intent 过滤器通常包含一系列的动作 (action)...