Android开机第一个Launcher

时间:2022-07-26 16:48:06

Android开机第一个Launcher应该是Provision,其AndroidManifest.xml文件为:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.provision">
<original-package android:name="com.android.provision" />
<!-- For miscellaneous settings -->
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
<application>
<activity android:name="DefaultActivity"
android:excludeFromRecents="true">
<intent-filter android:priority="1">
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
</application>
</manifest>

android:excludeFromRecents="true"         //不在最近列表中显示

android:priority="1"        //优先级为1。默认为0,值越大,优先级越高。比一般的Launcher优先级要高,ActivityManagerService会先调用这个Launcher

<category android:name="android.intent.category.HOME" />       //作为Launcher

它只有一个Activity,即DefaultActivity,为
public class DefaultActivity extends Activity {
@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
// Add a persistent setting to allow other apps to know the device has been provisioned.
Settings.Global.putInt(getContentResolver(), Settings.Global.DEVICE_PROVISIONED, 1);
Settings.Secure.putInt(getContentResolver(), Settings.Secure.USER_SETUP_COMPLETE, 1);

Settings.Secure.putString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED, LocationManager.NETWORK_PROVIDER);

// remove this activity from the package manager.
PackageManager pm = getPackageManager();
ComponentName name = new ComponentName(this, DefaultActivity.class);
pm.setComponentEnabledSetting(name, PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
// terminate the activity.
finish();
}
做的事情也比较简单:
把Settings.Global.DEVICE_PROVISIONED的值设置为1,把Settings.Secure.USER_SETUP_COMPLETE的值也设置为1,
把Settings.Secure.LOCATION_PROVIDERS_ALLOWED的值设置为LocationManager.NETWORK_PROVIDER(对应的值为network,主要是控制网络中的位置服务是否开启。这个是公司客制化)。
通过PackageManager中的setComponentEnabledSetting来关掉组件DefaultActivity。
然后自己调用finish()方法自杀。

可以在这个Launcher中来设置系统中默认的属性(除非系统重置或是用户重新设置,否则不会改变),也可以在这里面来判断当系统中存在多个Launcher时具体使用哪一个Launcher。