Android(安卓)intent 显示和隐士意图
在Android中,经常会使用到 intent. 但是一般 使用的比较多的 是显示意图。隐士意图用的比较少
先了解定义:
1.显示意图;有明确指定条件 指定需要启动的组件;通过指定Intent组件名称来实现的,它一般用在知道目标组件名称的前提下,一般是在相同的应用程序内部实现的。
2.隐式意图;没有明确指定要启动的组件,但是是有条件的指定 ,组件通过Intent Filter来实现的,它一般用在没有明确指出目标组件名称的前提下,一般是用于在不同应用程序之间。
显示意图每个项目都有使用很多, 如跳转界面时 我们明确知道要跳转到哪个界面
public class MainActivity extends Activity { private Button btn; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); btn = (Button)findViewById(R.id.btn); //响应按钮btn事件 btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //显示方式声明Intent,直接启动SecondActivity Intent it = new Intent(MainActivity.this,SecondActivity.class); //启动Activity startActivity(it); } }); } }
显示意图很常用, 其实这篇文章主讲隐士意图。 隐士意图 在我们打开 文件. 浏览器 或一些 资源的时候 会有个系统弹出框 弹出 几个 能操作 这些资源的APP. 然后 我们选择其中一个 使用。
比如 我们做的是个 打电话的APP,当用户 在 其他程序(如QQ 微信 )等 接受到 别人发的电话号码,点击拨打 。怎么样让我们自己的程序 出现 让用户选择? 了解下面内容 就能有对隐士意图的使用有个清晰的概念。
接过上面的问题 我们先看看 意图过滤器 intentFilter.
<intent-filter>
<!--动作-->
<action android:name="android.intent.action.CALL" />
<!--类别->
<category android:name="android.intent.category.DEFAULT" />
<!--数据-->
<data >
</intent-filter>
可以有多个动作 ,类别 和 多个数据。 那么它们之间的关系是什么? 不同种标签是并且关系 同种标签是 或者关系
我们首先来看看 系统打电话的源码 里面的 意图过滤器是怎么写的
<activity-alias android:name="PrivilegedOutgoingCallBroadcaster" android:targetActivity="OutgoingCallBroadcaster" android:theme="@android:style/Theme.NoDisplay" android:permission="android.permission.CALL_PRIVILEGED"> <intent-filter> <action android:name="android.intent.action.CALL_PRIVILEGED" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="tel" /> </intent-filter> <intent-filter android:icon="@drawable/ic_launcher_sip_call"> <action android:name="android.intent.action.CALL_PRIVILEGED" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="sip" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.CALL_PRIVILEGED" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="voicemail" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.CALL_PRIVILEGED" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="vnd.android.cursor.item/phone" /> <data android:mimeType="vnd.android.cursor.item/phone_v2" /> <data android:mimeType="vnd.android.cursor.item/person" /> </intent-filter> </activity-alias>
不同种标签是并且关系 同种标签是 或者关系。 怎么理解这句话?
多个 意图过滤器 之间是 或者关系,也就是 这个应用 既可以打普通的 电话(tel),还可以打网络电话(sip),还能发语音邮件(voicemail);
单个意图过滤器里面是并且的关系 也就是 动作 需要满足条件 并且 你的 类型也需要满足,还有data的格式 都满足时候 才能调用。
想清楚上面的东西。想要在打开我们的资源时 出现我们自己的APP选项并不难了。
下面通过一个demo让大家 加深印象 比如我们就打开sd卡目录下的一个txt文件
public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}public void jump(View v){Intent intent = new Intent();intent.setAction("com.xxx.ReadText");File file = new File("/mnt/sdcard/mypersons.txt");Uri uri = Uri.fromFile(file);intent.setDataAndType(uri, "text/html");startActivity(intent);}}
隐士意图打开的配置
<activity android:name="com.ww.MyTxtReaderActivity"> <intent-filter > <action android:name="com.xxx.ReadText"/> <category android:name="android.intent.category.DEFAULT"/> <data android:scheme="file" android:mimeType="text/html"/> </intent-filter> </activity> </application>
选择被打开的界面 接收数据 展示数据等等......
public class MyTxtReaderActivity extends Activity {private TextView tv;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.txt_layout);tv = (TextView)findViewById(R.id.textView1);Intent intent = getIntent();Uri data = intent.getData();String path = data.getPath();System.out.println(path);}}
还有一些打电话 发短信 等 一些启动其他程序的隐士意图 就不说了,比较简单。 对于隐士意图用的比较少的 相信会有收获。
更多相关文章
- Android加载不同DPI资源与内存消耗之间的关系
- Android异步消息处理机制 深入理解Looper、Handler、Message的关
- 几张SVG矢量图看明所有操作系统之间的演进关系
- [置顶] 作为人才我们为什么要和几个猎头保持良好的关系?
- 深入Android(安卓)【四】 —— 组件调用
- Android里应用程序,应用程序窗口和视图对象之间的关系
- dpi、dp、sp、px、mm之间的关系
- Android获取root权限的利弊关系
- Android(安卓)加载不同 DPI 资源与内存消耗间的关系