开机默认Launcher
来源:互联网 发布:简单的录制软件 编辑:程序博客网 时间:2024/05/17 01:57
LAUNCH BY DEFAULT
You've chosen to launch this app by default for some actions.
packages\apps\Provision\src\com\android\provision\DefaultActivity.java
/* * Copyright (C) 2008 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */package com.android.provision;import android.app.Activity;import android.content.ComponentName;import android.content.Intent;import android.content.IntentFilter;import android.content.pm.PackageManager;import android.content.pm.ResolveInfo;import android.os.Bundle;import android.os.SystemProperties;import android.provider.Settings;import android.util.Log;import java.util.List;/** * Application that sets the provisioned bit, like SetupWizard does. */public class DefaultActivity extends Activity {private static final String TAG = "DefaultActivity"; @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); // remove this activity from the package manager. PackageManager pm = getPackageManager(); Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_HOME); List<ResolveInfo> resolveInfoList = pm.queryIntentActivities(intent, 0); if(resolveInfoList != null) { int size = resolveInfoList.size(); for(int j=0; j<size; j++) { final ResolveInfo r = resolveInfoList.get(j); if(r.activityInfo.packageName.equals(this.getPackageName())) { resolveInfoList.remove(j); size -= 1; break; } } ComponentName[] set = new ComponentName[size]; String defaultLauncherPackage = SystemProperties.get("ro.defaultlauncher.package", "com.android.launcher2"); String defaultLauncherClass = SystemProperties.get("ro.defaultlauncher.class", "com.android.launcher2.Launcher"); ComponentName defaultLauncher = new ComponentName(defaultLauncherPackage, defaultLauncherClass); int defaultMach = 0; for(int i=0; i<size; i++) { final ResolveInfo resolveInfo = resolveInfoList.get(i); Log.d(TAG, resolveInfo.toString()); set[i] = new ComponentName(resolveInfo.activityInfo.packageName, resolveInfo.activityInfo.name); if(defaultLauncher.getClassName().equals(resolveInfo.activityInfo.name)) { defaultMach = resolveInfo.match; } } Log.d(TAG, "defaultMatch="+Integer.toHexString(defaultMach)); IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_MAIN); filter.addCategory(Intent.CATEGORY_HOME); filter.addCategory(Intent.CATEGORY_DEFAULT); pm.clearPackagePreferredActivities(defaultLauncher.getPackageName()); pm.addPreferredActivity(filter, defaultMach, set, defaultLauncher); } else { Log.d(TAG, "****resolveInfoList is null."); } ComponentName name = new ComponentName(this, DefaultActivity.class); pm.setComponentEnabledSetting(name, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); // terminate the activity. finish(); }}
另外参考frameworks\base\services\java\com\android\server\pm\PackageManagerService.java
ResolveInfo findPreferredActivity(Intent intent, String resolvedType, int flags, List<ResolveInfo> query, int priority, int userId) { if (!sUserManager.exists(userId)) return null; // writer synchronized (mPackages) { if (intent.getSelector() != null) { intent = intent.getSelector(); } if (DEBUG_PREFERRED) intent.addFlags(Intent.FLAG_DEBUG_LOG_RESOLUTION); PreferredIntentResolver pir = mSettings.mPreferredActivities.get(userId); List<PreferredActivity> prefs = pir != null ? pir.queryIntent(intent, resolvedType, (flags & PackageManager.MATCH_DEFAULT_ONLY) != 0, userId) : null; if (prefs != null && prefs.size() > 0) { // First figure out how good the original match set is. // We will only allow preferred activities that came // from the same match quality. int match = 0; if (DEBUG_PREFERRED) { Log.v(TAG, "Figuring out best match..."); } final int N = query.size(); for (int j=0; j<N; j++) { final ResolveInfo ri = query.get(j); if (DEBUG_PREFERRED) { Log.v(TAG, "Match for " + ri.activityInfo + ": 0x" + Integer.toHexString(match)); } if (ri.match > match) { match = ri.match; } } if (DEBUG_PREFERRED) { Log.v(TAG, "Best match: 0x" + Integer.toHexString(match)); } match &= IntentFilter.MATCH_CATEGORY_MASK; final int M = prefs.size(); for (int i=0; i<M; i++) { final PreferredActivity pa = prefs.get(i); if (pa.mPref.mMatch != match) { continue; } final ActivityInfo ai = getActivityInfo(pa.mPref.mComponent, flags | PackageManager.GET_DISABLED_COMPONENTS, userId); if (DEBUG_PREFERRED) { Log.v(TAG, "Got preferred activity:"); if (ai != null) { ai.dump(new LogPrinter(Log.VERBOSE, TAG), " "); } else { Log.v(TAG, " null"); } } if (ai == null) { // This previously registered preferred activity // component is no longer known. Most likely an update // to the app was installed and in the new version this // component no longer exists. Clean it up by removing // it from the preferred activities list, and skip it. Slog.w(TAG, "Removing dangling preferred activity: " + pa.mPref.mComponent); pir.removeFilter(pa); continue; } for (int j=0; j<N; j++) { final ResolveInfo ri = query.get(j); if (!ri.activityInfo.applicationInfo.packageName .equals(ai.applicationInfo.packageName)) { continue; } if (!ri.activityInfo.name.equals(ai.name)) { continue; } // Okay we found a previously set preferred app. // If the result set is different from when this // was created, we need to clear it and re-ask the // user their preference. if (!pa.mPref.sameSet(query, priority)) { Slog.i(TAG, "Result set changed, dropping preferred activity for " + intent + " type " + resolvedType); pir.removeFilter(pa); return null; } // Yay! return ri; } } } } return null; }
- 开机默认Launcher
- android 开机默认进入指定Launcher
- 多个launcher时开机只启动默认的
- android 当系统存在多个Launcher时,如何设置开机自动进入默认的Launcher?
- android 当系统存在多个Launcher时,如何设置开机自动进入默认的Launcher
- android 当系统存在多个Launcher时,如何设置开机自动进入默认的Launcher?
- 当系统存在多个Launcher时,如何设置开机自动进入默认的Launcher?
- android 当系统存在多个Launcher时,如何设置开机自动进入默认的Launcher?
- 系统存在多个Launcher时,如何设置开机自动进入默认的Launcher
- android 当系统存在多个Launcher时,如何设置开机自动进入默认的Launcher?
- Android系统存在多个Launcher时,设置开机进入默认的Launcher
- 当系统存在多个Launcher时,如何设置开机自动进入默认的Launcher?
- Android系统存在多个Launcher时,设置开机进入默认的Launcher
- Android 当系统存在多个Launcher时,如何设置开机自动进入默认的Launcher?
- 当系统存在多个Launcher时,如何设置开机自动进入默认的Launcher?
- android 系统存在多个Launcher时,设置开机自动进入默认的Launcher
- android 开机不弹出Launcher选择,直接进入需要默认的Launcher,
- 当系统存在多个Launcher时,如何设置开机自动进入默认的Launcher?
- smarty truncate
- 如何在一个view上 显示两个tableview
- 【C++ / Java】char数组和string的相互转换及自动转换
- Unity3d 截屏
- Linux下的IO监控与分析
- 开机默认Launcher
- 苹果电脑MACbook Air快捷键大全
- 25个增强iOS应用程序性能的提示和技巧--中级篇
- UVA 11624 Fire!(二次BFS)
- sql server2005+ 分页查询汇总
- load data local infile 从本机导数据到远程机器
- 判断文件是否存在
- ubuntu-server-12.04.2配置IP、DNS
- Linux常用100个命令