简述:结构化描述intent匹配的信息。包含:action,categories and data(via type,scheme ,path),还有priority, to order multiple matching filters.
IntentFilter 中如果action为空,则视为通配符,如果type为空,则intent必须不设type,否则匹配不上。
data被分为3个属性:type,scheme,authority/path 任何设置的属性intent必须匹配上。
设置了scheme 而没设type,则intent也必须类似,不能设置type,也不能是content: URI.
设置了type而没设scheme:将匹配上没有URI的intent,或者content:,file:的uri。
设置了authority:必须指定一个或多个相关联的schemes
设置了path:唏嘘指定一个或多个相关联的schemes
匹配规则:
IntentFilter 匹配Intent的上的条件:
Action : 值相同 ,或则IntentFilter未指定action.
DataType:. 系统通过调用Intent.resolve(ContentResolver)获取type,通配符*
在Intent/IntentFilter的MIME type中使用,区分大小写
DataScheme:系统通过调用Intent. getData() and Uri.getScheme())获取scheme, 区分大小写
DataAuthority:必须有一个dataScheme匹配上且authority值匹配上,或者IntentFilter没有定义。 Intent. getData() and Uri.getAuthority()获取authority.
DataPath: scheme and authority必须先匹配上 ntent. getData() and Uri.getPath(),获取. 或者IntentFilter没有定义
Categories:all of the categories in the Intent match categories given in the filter 多余的Categorie,不影响intent匹配,如果IntentFilter
没有指定Categorie,则只能匹配上没有Categorie的intent。
常用intent列表:
Android Intent 用法汇总
显示网页
- <activity android:name="BrowserActivity" android:label="Browser" android:launchMode="singleTask" android:alwaysRetainTaskState="true" android:configChanges="orientation|keyboardHidden" android:theme="@style/BrowserTheme">
- <!--
For these schemes were not particular MIME type has been
supplied, we are a good candidate.
-->
- <intent-filter>
<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" />
</intent-filter>
- <!--
For these schemes where any of these particular MIME types
have been supplied, we are a good candidate.
-->
- <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:mimeType="text/html" />
<data android:mimeType="text/plain" />
<data android:mimeType="application/xhtml+xml" />
<data android:mimeType="application/vnd.wap.xhtml+xml" />
</intent-filter>
- <!--
We are also the main entry point of the browser.
-->
- <intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.BROWSABLE" />
</intent-filter>
- <intent-filter>
<action android:name="android.intent.action.WEB_SEARCH" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="" />
<data android:scheme="http" />
<data android:scheme="https" />
</intent-filter>
- <intent-filter>
<action android:name="android.intent.action.WEB_SEARCH" />
<action android:name="android.intent.action.MEDIA_SEARCH" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
- <intent-filter>
<action android:name="android.intent.action.SEARCH" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<meta-data android:name="android.app.searchable" android:resource="@xml/searchable" />
- <intent-filter>
<action android:name="android.net.http.NETWORK_STATE" />
<action android:name="android.intent.action.PROXY_CHANGE" />
</intent-filter>
</activity>
1. Uri uri = Uri.parse("http://google.com");
2. Intent it = new Intent(Intent.ACTION_VIEW, uri);
3. startActivity(it);
显示地图
1. Uri uri = Uri.parse("geo:38.899533,-77.036476");
2. Intent it = new Intent(Intent.ACTION_VIEW, uri);
3. startActivity(it);
4. //其他 geo URI 範例
5. //geo:latitude,longitude
6. //geo:latitude,longitude?z=zoom
7. //geo:0,0?q=my+street+address
8. //geo:0,0?q=business+near+city
9. //google.streetview:cbll=lat,lng&cbp=1,yaw,,pitch,zoom&mz=mapZoom
路径规划
1. Uri uri = Uri.parse("http://maps.google.com/maps?f=d&saddr=startLat%20startLng&daddr=endLat%20endLng&hl=en");
2. Intent it = new Intent(Intent.ACTION_VIEW, uri);
3. startActivity(it);
4. //where startLat, startLng, endLat, endLng are a long with 6 decimals like: 50.123456
打电话
1. //叫出拨号程序
2. Uri uri = Uri.parse("tel:0800000123");
3. Intent it = new Intent(Intent.ACTION_DIAL, uri);
4. startActivity(it);
1. //直接打电话出去
2. Uri uri = Uri.parse("tel:0800000123");
3. Intent it = new Intent(Intent.ACTION_CALL, uri);
4. startActivity(it);
5. //用這個,要在 AndroidManifest.xml 中,加上
6. //<uses-permission id="android.permission.CALL_PHONE" />
传送SMS/MMS
1. //调用短信程序
2. Intent it = new Intent(Intent.ACTION_VIEW, uri);
3. it.putExtra("sms_body", "The SMS text");
4. it.setType("vnd.android-dir/mms-sms");
5. startActivity(it);
1. //传送消息
2. Uri uri = Uri.parse("smsto://0800000123");
3. Intent it = new Intent(Intent.ACTION_SENDTO, uri);
4. it.putExtra("sms_body", "The SMS text");
5. startActivity(it);
1. //传送 MMS
2. Uri uri = Uri.parse("content://media/external/images/media/23");
3. Intent it = new Intent(Intent.ACTION_SEND);
4. it.putExtra("sms_body", "some text");
5. it.putExtra(Intent.EXTRA_STREAM, uri);
6. it.setType("image/png");
7. startActivity(it);
传送 Email
1. Uri uri = Uri.parse("mailto:xxx@abc.com");
2. Intent it = new Intent(Intent.ACTION_SENDTO, uri);
3. startActivity(it);
1. Intent it = new Intent(Intent.ACTION_SEND);
2. it.putExtra(Intent.EXTRA_EMAIL, "me@abc.com");
3. it.putExtra(Intent.EXTRA_TEXT, "The email body text");
4. it.setType("text/plain");
5. startActivity(Intent.createChooser(it, "Choose Email Client"));
1. Intent it=new Intent(Intent.ACTION_SEND);
2. String[] tos={"me@abc.com"};
3. String[] ccs={"you@abc.com"};
4. it.putExtra(Intent.EXTRA_EMAIL, tos);
5. it.putExtra(Intent.EXTRA_CC, ccs);
6. it.putExtra(Intent.EXTRA_TEXT, "The email body text");
7. it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");
8. it.setType("message/rfc822");
9. startActivity(Intent.createChooser(it, "Choose Email Client"));
1. //传送附件
2. Intent it = new Intent(Intent.ACTION_SEND);
3. it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");
4. it.putExtra(Intent.EXTRA_STREAM, "file:///sdcard/mysong.mp3");
5. sendIntent.setType("audio/mp3");
6. startActivity(Intent.createChooser(it, "Choose Email Client"));
播放多媒体
Uri uri = Uri.parse("file:///sdcard/song.mp3");
Intent it = new Intent(Intent.ACTION_VIEW, uri);
it.setType("audio/mp3");
startActivity(it);
Uri uri = Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI, "1");
Intent it = new Intent(Intent.ACTION_VIEW, uri);
startActivity(it);
Market 相关
1. //寻找某个应用
2. Uri uri = Uri.parse("market://search?q=pname:pkg_name");
3. Intent it = new Intent(Intent.ACTION_VIEW, uri);
4. startActivity(it);
5. //where pkg_name is the full package path for an application
1. //显示某个应用的相关信息
2. Uri uri = Uri.parse("market://details?id=app_id");
3. Intent it = new Intent(Intent.ACTION_VIEW, uri);
4. startActivity(it);
5. //where app_id is the application ID, find the ID
6. //by clicking on your application on Market home
7. //page, and notice the ID from the address bar
Uninstall 应用程序
1. Uri uri = Uri.fromParts("package", strPackageName, null);
2. Intent it = new Intent(Intent.ACTION_DELETE, uri);
3. startActivity(it);
分享到:
相关推荐
在信息过滤场景中,我们可以创建一个`IntentFilter`来指定我们感兴趣的特定类型的信息,比如短信的特定关键字或来源。通过注册`BroadcastReceiver`并为其设置`IntentFilter`,我们可以监听并处理符合过滤条件的事件...
这个压缩包“Android 信息过滤功能源码.rar”可能包含了一个实现此类功能的开源项目,让我们深入探讨一下Android信息过滤的相关知识点。 1. **Android权限系统**:在Android中,为了访问短信存储或拦截短信,应用...
在获取手机信息的示例中,可能需要`READ_PHONE_STATE`权限来访问电话相关的硬件信息,如IMEI和SIM卡信息。 2. **Activity**:在Android中,Activity是用户界面的基本组件。此项目中的Activity可能会包含一个或多个...
此外,从Android 6.0(API level 23)开始,应用在运行时可能需要请求`ACCESS_FINE_LOCATION`或`ACCESS_COARSE_LOCATION`权限来获取网络状态,因为网络连接信息可能与位置有关。 至于数据使用统计,Android提供了`...
下面将详细阐述相关知识点。 一、广播的概念与类型 1. 广播Intent:广播是通过Intent对象在Android系统中发送的,Intent可以携带数据,并在组件之间传递信息。 2. 动态注册与静态注册:广播接收器可以通过在...
2. **使用`BatteryManager`类**:这是一个内置的管理类,提供了与电池相关的各种信息。 #### 三、实现步骤 ##### 1. 创建BroadcastReceiver 创建一个继承自`BroadcastReceiver`的类,并重写`onReceive`方法。在这...
IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED); registerReceiver(new BatteryInfoReceiver(), filter); ``` 3. **解析Intent数据**: 在onReceive()方法中,我们可以通过Intent对象来...
* `IntentFilter mFilter`:用于 Intent 过滤器,处理 Wifi 相关的广播事件。 * `BroadcastReceiver mReceiver`:用于接收 Wifi 相关的广播事件,并作出相应的处理。 * `Scanner mScanner`:用于扫描 AP(Access ...
在Android系统中,读取手机信息是开发过程中常见的需求,比如获取IMEI号、SIM卡信息、运营商信息、网络状态等。本资料将详细介绍如何在Android...通过以上介绍的方法,开发者可以轻松地获取和管理电信设备的相关信息。
在Android系统中,`WifiManager`是用于处理Wi-Fi功能的主要组件,它提供了一系列的方法来控制Wi-Fi状态,查询相关信息。要使用`WifiManager`,你需要在AndroidManifest.xml文件中添加以下权限: ```xml ``` 接着...
下面我们将深入探讨Android信息过滤的相关知识点。 1. **Android权限管理**: 在Android系统中,为了访问短信,应用需要声明`READ_SMS`和`WRITE_SMS`权限。在AndroidManifest.xml文件中添加如下权限: ```xml ...
它可能包含了设置`IntentFilter`、解析URI参数以及响应动作的相关代码。 总之,通过利用HTML的链接和Android应用的URI Scheme,我们可以实现从Web页面直接启动本地应用的功能。这种技术在推广移动应用、实现Web与...
1. **NfcAdapter**:这是Android系统中的核心类,用于管理与NFC相关的操作。开发者可以通过`NfcAdapter.getDefaultAdapter(Context)`获取默认的`NfcAdapter`实例,然后调用其方法来启动或关闭NFC,或者设置监听器来...
若未指定,系统会根据Intent的Action、Data和Category等信息,通过IntentFilter匹配合适的接收组件。 4. **IntentFilter**: IntentFilter是组件用来声明它可以响应哪些Intent的机制。例如,一个Activity可以在其...
描述中的“首界面如图4所示”,虽然没有提供具体图像信息,但可以理解为用户界面有一个“查看图片”的按钮或菜单项,点击后会触发一个Intent,这个Intent携带了要查看的图片信息。系统会根据`data`和`type`属性过滤...
例如,如果一个Activity想要响应查看联系人信息的请求,它需要在AndroidManifest.xml中定义一个IntentFilter,声明支持ACTION_VIEW和相应的数据类型(如vnd.android.cursor.item/person)。 4. **组件间通信**:当...
在提供的压缩包文件“Android_Exp4_Broadcast”中,可能包含了实现上述功能的示例代码,包括BroadcastReceiver的定义、注册、发送广播的代码片段,以及相关的日志输出和调试信息。通过分析这些代码,你可以更直观地...