我打算分四节记录我多广播的理解。能力有限,写得不对的地方望网友指正。
Intent android.content.
Intent.setClassName(
Context packageContext,
String className)
Intent android.content.
Intent.setClassName(
String packageName,
String className)
<category android:name="android.intent.category.DEFAULT" />
第一节:Intent
第二节:Broadcast
第三节:BroadcastReceive
第四节:对留出的问题做解答
----------------------------------------------------------------------------------------------
下面开始第一节,Intent,我们把它翻译成意图,intent是android中独有的一个组件,它能够在程序中发起一个动作,比如跳转到另一个activity,启动一个service。Intent分为显式的Intent和隐式的Intent。
先讲显式的Intent.显式的Intent比较简单,显式的意思就是很明显的展示出Intent的起点和终点,也就是谁有意图,这个意图是指向谁的,都很明白。先上代码:
Intent intent = new Intent(); //创建Intent对象
intent.setClass(this, OtherActivity.class); //指定intent的起点与终点
startActivity(intent); //启动intent
就这三句话,就实现了一次intent,当然显示的指出intent的方式有很多,大家可以看看API,这里就不多说了,但是我还要强调一下
setClassName()这个API,他有一个重载方法很特殊
这两是一个重载方法,前者第一个参数是上下文对象,后者第一个参数是一个String。它们的第二个参数是相同的,String类型的className,这个className要求是一个带包名的完整名称,
(这里不能直接粘截图,有点蛋疼,有好使点的博客介绍我啊!插个图好麻烦。。。)
假如现在要跳转到本程序中的MainActivity中,那么className要写作"com.example.alarm.MainActivity",对于Context这个参数我就不说了,String packageName这个参数要求指定一个包名,有了这个参数,那么这个方法能实现一个特别有用的功能,就是启动其它应用,当然这个应用没有加权限。假如我手机上还有一个weather应用,其开发包名是com.example.weather,那么我可以用intent.setClassName("
com.example.weather","
com.example.weather.LoginActivity");启动手机上的weather这个应用了。
当然,如果你需要在跳转到另一个地方时,带上一些数据,你可以实用Intent的putExtra()这个API,你可以根据你的参数类型选择它的重载方法。
下面讲隐式的Intent。隐式Intent就是没有明确的指出意图的终点,它指定0个或者多个动作(action)、类别(category)、数据(URI和数据类型),如果某个Activity或者Service配置的<intent-filter>符合这个intent指定的条件,那么这个Activity或者Service将被启动。
看代码:
编写一个intent
![Intent和BroadCast(一) Intent和BroadCast(一)](https://i-blog.csdnimg.cn/blog_migrate/a4c26d1e5885305701be709a3d33442f.gif)
设定<intent_filter>
启动程序,用一个button事件启动上面的intent,界面跳转到OtherActivity。如果我们没有给intent设定数据(URI和数据类型),那么只要intent所设的条件都在<intent-filter>中,那么这个Activity就会被启动,如果设定了数据
(URI和数据类型),又会是怎么样呢?一个intent会不会启动多个activity呢?这个两个问题留给大家去实践一下,我将在第四节中解答。
补充一句,startActivity(intent);会自动添加一个intent category,也就是
如果上面<intent-filter>没有这一句则无法被启动。