在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);}}

还有一些打电话 发短信 等 一些启动其他程序的隐士意图 就不说了,比较简单。 对于隐士意图用的比较少的 相信会有收获。


更多相关文章

  1. Android加载不同DPI资源与内存消耗之间的关系
  2. Android异步消息处理机制 深入理解Looper、Handler、Message的关
  3. 几张SVG矢量图看明所有操作系统之间的演进关系
  4. [置顶] 作为人才我们为什么要和几个猎头保持良好的关系?
  5. 深入Android(安卓)【四】 —— 组件调用
  6. Android里应用程序,应用程序窗口和视图对象之间的关系
  7. dpi、dp、sp、px、mm之间的关系
  8. Android获取root权限的利弊关系
  9. Android(安卓)加载不同 DPI 资源与内存消耗间的关系

随机推荐

  1. web test LoadRunner Android(安卓)/ APK
  2. Android JNI入门第一篇――HelloWord
  3. Android jetpack Room数据库(一)基本使用
  4. 一个android访问http资源的便捷工具类―
  5. android 应用程序自适应屏幕大小
  6. Android 访问网络连接设置界面
  7. android 使内容铺满全屏
  8. 3.Retrofit上传头像给后端
  9. 实现类似Android联系人搜索功能
  10. android沉浸式状态栏实现,android沉浸式状