Android:如何更改默认的主屏幕应用程序

Android:如何更改默认的主屏幕应用程序

这段代码在我的ICS设备上运行良好:我使用了一个对某些调用敏感的服务,其中之一被称为SET_PREFERRED_LAUNCHER,将您的新默认启动器包(PREFERRED_PACKAGE_KEY)和其活动(PREFERRED_ACTIVITY_KEY)放入bundle中。

Method installPackageMethod = null;

Method deletePackageMethod = null;

Method setPreferredActivityMethod = null;

Method replacePreferredActivityMethod = null;

Object pm = null;

@Override

public void onCreate() {

super.onCreate();

if (pm == null)

pm = getPackageManager();

try {

if (setPreferredActivityMethod == null)

setPreferredActivityMethod = pm.getClass().getMethod(

"addPreferredActivity", IntentFilter.class, int.class,

ComponentName[].class, ComponentName.class);

} catch (NoSuchMethodException e) {

e.printStackTrace();

}

}

private final class ServiceHandler extends Handler {

private Context context;

public ServiceHandler(Looper looper, Context ctx) {

super(looper);

context = ctx;

}

@Override

public void handleMessage(Message msg) {

Intent intent = (Intent) msg.getData().getParcelable(

UPDATER_SERVICE_ACTION);

int request = intent.getIntExtra(

REQUEST_KEY,

REQUEST_UNKNOWN);

Bundle bundle = intent.getExtras();

switch (request) {

case INSTALL_APPLICATION: {

if (bundle != null) {

String appPath = bundle

.getString(APP_PATH_KEY);

if (appPath != null) {

LogUtil.e(TAG, "try to install " + appPath);

try {

am.installPackage(appPath);

} catch (Exception e) {

e.printStackTrace();

}

LogUtil.e(TAG, "install of " + appPath + " done");

}

}

break;

}

case UNISTALL_PACKAGE: {

if (bundle != null) {

String packagename = bundle

.getString(PACKAGE_NAME_KEY);

if (packagename != null) {

LogUtil.e(TAG, "unistall " + packagename);

try {

deletePackageMethod

.invoke(pm, packagename, null, 0);

} catch (Exception e) {

e.printStackTrace();

}

}

}

break;

}

case SET_PREFERRED_LAUNCHER: {

if (bundle != null) {

String package_name = bundle

.getString(PREFERRED_PACKAGE_KEY);

if (package_name == null) {

LogUtil.e(TAG,

"WARNING: setDefaultActivity cannot continue, package is NULL");

return;

}

String activity_name = bundle

.getString(PREFERRED_ACTIVITY_KEY);

if (activity_name == null) {

LogUtil.e(TAG,

"WARNING: setDefaultActivity cannot continue, activity is NULL");

return;

}

LogUtil.e(TAG, "setDefaultActivity activity="

+ activity_name + " package=" + package_name);

IntentFilter filter = new IntentFilter(

"android.intent.action.MAIN");

filter.addCategory("android.intent.category.HOME");

filter.addCategory("android.intent.category.DEFAULT");

ComponentName[] components = new ComponentName[] {

new ComponentName("com.android.launcher",

"com.android.launcher2.Launcher"),

new ComponentName(package_name, activity_name) };

ComponentName activity = new ComponentName(package_name,

activity_name);

try {

setPreferredActivityMethod.invoke(pm, filter,

IntentFilter.MATCH_CATEGORY_EMPTY, components,

activity);

} catch (Exception e) {

e.printStackTrace();

}

}

}

}

}

}

请记得在您的清单文件中添加此权限:

使用方法:

public void setPreferredLauncher(String activity_name,String package_name)

{

Intent intent = new Intent(UPDATER_SERVICE_ACTION);

intent.putExtra(REQUEST_KEY, SET_PREFERRED_LAUNCHER);

intent.putExtra(PREFERRED_ACTIVITY_KEY, activity_name);

intent.putExtra(PREFERRED_PACKAGE_KEY, package_name);

context.startService(intent);

}

其中:

public static final String _UPDATER_SERVICE_ACTION = "com.android.updaterservice.ACTION";

public static final String REQUEST_KEY = "com.android.updaterservice.REQUEST_KEY";

public static final String PACKAGE_NAME_KEY = "com.android.updaterservice.PACKAGE_NAME_KEY";

public static final String APP_PATH_KEY = "com.android.updaterservice.APP_PATH_KEY";

public static final String PREFERRED_ACTIVITY_KEY = "com.android.updaterservice.PREFERRED_ACTIVITY_KEY";

public static final String PREFERRED_PACKAGE_KEY = "com.android.updaterservice.PREFERRED_PACKAGE_KEY";

public static final String INSTALL_PACKAGE_RESULT = "com.android.updaterservice.INSTALL_PACKAGE_RESULT";

public static final String PACKAGE_NAME = "PACKAGE_NAME";

public static final String INSTALL_SUCCEEDED = "INSTALL_SUCCEEDED";

public static final int REQUEST_UNKNOWN = -1;

public static final int INSTALL_APPLICATION = 1;

public static final int UNISTALL_PACKAGE = 2;

public static final int SET_PREFERRED_LAUNCHER = 3;

相关推荐

引发仪表及控制系统故障的原因有哪些
365网新闻

引发仪表及控制系统故障的原因有哪些

📅 06-28 👁️ 6226
獭兔是什么兔子?獭兔常见的品种有哪些?
英国beat365官方登录

獭兔是什么兔子?獭兔常见的品种有哪些?

📅 07-01 👁️ 9895
以鸡架喂狗,科学健康的饲养方式(合理搭配饲料,确保狗狗的营养需求)
力量训练休息时间间隔 多久合适呢?
中爱365APP

力量训练休息时间间隔 多久合适呢?

📅 07-03 👁️ 4234
摩洛哥本届世界杯4胜1平2负 创历史杀入四强
英国beat365官方登录

摩洛哥本届世界杯4胜1平2负 创历史杀入四强

📅 07-08 👁️ 2197
四大神兽实力排名(四大神兽谁是老大)
365网新闻

四大神兽实力排名(四大神兽谁是老大)

📅 07-08 👁️ 6843
苹果手机的标志为什么被咬了一口?
365网新闻

苹果手机的标志为什么被咬了一口?

📅 07-02 👁️ 8202
cs七龙珠变身秘籍-【cs七龙珠怎么召唤神龙变身】?
咪咕、优酷还是央视?世界杯三大视频直播源横向评测
iPhone恢复模式卡住?iPhone重置很久?教你 5 招快速解决!
查询自己的ip地址(查询自己的IP地址的命令)
英国beat365官方登录

查询自己的ip地址(查询自己的IP地址的命令)

📅 07-08 👁️ 4409
qq飞车宠物数据排行,QQ飞车宠物数据全解析,性能、属性与实战表现深度对比(附2023年最新排行榜)