在上篇文章中写了关于显式Intent的使用,这次,写一下关于隐式Intent的使用。
那么什么是隐式Intent?
定义:隐式Intent是没有明确目标组件名称的Intent。
那么隐式Intent有什么作用呢?
在显示Intent中,主要的是用于程序本身的Activity、Service、Broadcaster之间的通讯。而隐式Intent主要用于程序与其他不同应用程序之间的通讯。
下面我来举一个例子:
我们知道,很多手机游戏在玩的时候都会有分享这个功能,点击分享之后,就会出现,比如说发送到QQ,什么什么微博的。这其实就是用到了隐式Intent的功能。
这次我写了一个小程序,是这样的,在当前程序中的主Activity中存在一个按钮,点击该按钮后触发隐式Intent事件,然后呢?当前程序中还有另一个Activity,在这个Activity中只有一个TextView,在另一个程序中,也有一个Activity,同样里面是一个TextView。那么,当我点击之后,就会出现类似手游中点击分享之后出现的情况。下面看一下截图:
这里安卓学习之路_3和安卓学习之路_4是两个不同的应用程序,当前程序名字叫做安卓学习之路_4,那么点击第一个的时候,就会出现如下情况:
如上图所示,出现了在这个应用程序中的Activity中显示的文字。那么点击另一个的时候就会出现如下情况:
如上图所示,点击第二个就会出现本程序中的Activity。
那么如何实现这样的功能呢?
看一下这个代码:
public void onClick(View v) { Intent intent = new Intent(); intent.setAction("com.android_4.Activity"); //intent.addCategory("android.intent.category.DEFAULT"); intent.addCategory(Intent.CATEGORY_DEFAULT); startActivity(intent); }
这是该程序中按钮的点击事件。里面是什么先不讲,先看下面的:
上面写到,分别会跳转到不同程序中的Activity上,在Activity类中就不多说了。主要看两个程序中的AndroidManifest.xml,那么我们要能跳转到这两个Activity中,那么肯定要在这个xml文件中配置一下Activity,我们来看一下代码:
<activity android:name="com.example.android_3.Activity03"> <intent-filter > <action android:name="com.android.Activity"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </activity>
这是在安卓学习之路_3中的xml配置。
<activity android:name="com.example.android_4.Activity01"> <intent-filter> <action android:name="com.android.Activity"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </activity>
这是在安卓学习之路_4中的xml配置。
可以看到,这里面的action中的android:name是一摸一样的,并且也和上面的鼠标点击时间中的setAction的参数是一样的,现在来说一下上面setAction,这个方法,是通过参数来找到相同名字的activity。android.intent.category.DEFAULT这个参数是进行隐式Intent的必要。
intent.addCategory(Intent.CATEGORY_DEFAULT);
这一段代码就是设置一下intent的属性,其中Intent.CATEGORY_DEFAULT就是上面android.intent.category.DEFAULT这个,两者是等价的。其实这一段代码是可加可不加的,因为Intent的默认属性就是这个。
做完上述操作之后,就能实现类似于手游中分享功能了。虽然粗燥了点,但是基本功能都差不多。
End~