必威体育Betway必威体育官网
当前位置:首页 > IT技术

关于ComponentName的使用

时间:2019-10-16 10:13:25来源:IT技术作者:seo实验室小编阅读:78次「手机版」
 

componentname

componentname,顾名思义,就是组件名称,通过调用intent中的setComponent方法,我们可以打开另外一个应用中的Activity或者服务。

实例化一个ComponentName需要两个参数,第一个参数是要启动应用的包名称,这个包名称是指清单文件中列出的应用的包名称:

第二个参数是你要启动的Activity或者Service的全称(包名+类名),代码如下:

启动一个Activity:

Intent intent = new Intent();
			intent.setComponent(new ComponentName("com.example.otherAPP",
					"com.example.otherapp.MainActivity2"));
			startActivity(intent);

启动一个Service:

			Intent it = new Intent();
			it.setComponent(new ComponentName("com.example.otherapp",
					"com.example.otherapp.MyService"));
			startService(it);

注意

如果你要的启动的其他应用的Activity不是该应用的入口Activity,那么在清单文件中,该Activity节点一定要加上Android:exported="true",表示允许其他应用打开,对于所有的Service,如果想从其他应用打开,也都要加上这个属性:

        <service
            android:name="com.example.otherapp.MyService"
            android:exported="true" >
        </service>

        <activity
            android:name="com.example.otherapp.MainActivity2"
            android:exported="true" >
        </activity>

对于除了入口Activity之外的其他组件,如果不加这个属性,都会抛出java.lang.SecurityException: permission Denial.....”异常

那么为什么入口Activity不用添加这个属性就可以被其他应用启动呢?我们来看一段入口Activity的注册代码:

        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

入口Activity和普通Activity唯一不同的地方就是入口Activity多了一个过滤器,对于包含了过滤器的组件,意味着该组件可以提供给外部的其他应用来使用,它的exported属性默认为true,相反,如果一个组件不包含任何过滤器,那么意味着该组件只能通过指定明确的类名来调用,也就是说该组件只能在应用程序的内部使用,在这种情况下,exported属性的默认值是false。

明白否?

有问题欢迎交流...



相关阅读

ComponentName

ComponentName(组件名称)是用来打开其他应用程序中的Activity或服务的。Identifier for a specific application component (Activi

Android学习之ComponentName的使用

一、ComponentName简介 ComponentName,顾名思义,就是组件名称,这个类主要用来定义一个应用程序的组件,通过调用Intent中的setCompone

分享到:

栏目导航

推荐阅读

热门阅读