您的位置:首页 > 移动开发 > Android开发

[RK3288][Android6.0] 调试笔记 --- ComponentName的使用

2017-08-21 15:59 351 查看
Platform: Rockchip

OS: Android 6.0

Kernel: 3.10.92

之前没太注意它的具体内容,最近遇到service后台运行的问题正好关注一下。

Android的应用程序都是基于组件来标识的。它由两部分组成:包名和类名

通过这两个参数,系统可以打开对应应用程序下的Activity或Service.

包名和类型的定义都在AndroidManifest.xml中,例如

packages/providers/MediaProvider/AndroidManifest.xml:

包名:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
//这就是包名
package="com.android.providers.media"


类名:

//类名是"MediaScannerService" ,是一个Service
<service android:name="MediaScannerService" android:exported="true">
<intent-filter>
<action android:name="android.media.IMediaScannerService" />
</intent-filter>
</service>


调用:

系统提供了ComponentName类来处理调用启动对应的类。



例子:

frameworks/base/media/java/android/media/MediaScannerConnection.java

public void connect() {
synchronized (this) {
if (!mConnected) {
Intent intent = new Intent(IMediaScannerService.class.getName());
intent.setComponent(
new ComponentName("com.android.providers.media",
"com.android.providers.media.MediaScannerService"));
mContext.bindService(intent, this, Context.BIND_AUTO_CREATE);
mConnected = true;
}
}
}


注意:

1. 类名可以包含包名,也可以省略包名,以.开头

2. 启动的Activity或者Service如果不是入口Activity或者Service,那么一定要加上Android:exported=”true”

参考:

ComponentName

关于Android的组件名

关于ComponentName的使用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: