android设备修改默认桌面为自定义应用
应用场景
在一些专用安卓设备(例如丰巢柜),可能需要在点击默认的home键时启动自定义应用,屏蔽用户开启其他应用的入口,可通过下面介绍的方法将自己的应用设置为默认桌面。但是这时用户无法开启android设备的其他应用了,所以还需要为管理用户提供开启其他应用(例如系统设置)的入口。
1、修改默认桌面
假设需要设置为桌面应用app入口activity为MainActivity。
1.1 修改应用的AndroidManifest.xml
在MainActivity的intent-filter节点中添加如下配置:
1.2 创建工具类PackageListCache,缓存当前android安装的应用。
import android.app.Activity;
import com.alibaba.fastjson.JSONObject;
import java.util.HashMap;
import java.util.Map;
public final class PackageListCache {
//应用报名对应的启动入口activity和app名称
private static Map<String, JSONObject> PACKAGE_2_ACTIVITY = new HashMap<>();
private static Activity MAIN_ACTIVITY = null;
public static Activity getMainActivity() {
return MAIN_ACTIVITY;
}
public static void setMainActivity(Activity mainActivity) {
MAIN_ACTIVITY = mainActivity;
}
public static void addPackage(String pkg, JSONObject info) {
PACKAGE_2_ACTIVITY.put(pkg, info);
}
public static Map<String, JSONObject> getPackage2Activity() {
return PACKAGE_2_ACTIVITY;
}
}
1.3 修改 MainActivity
1.3.1 MainActivity添加变量,存储当前安卓设备的安装应用。
private List localApps = new ArrayList<>();
1.3.2 MainActivity启动后获取安卓设备的安装应用,供其他逻辑使用。
在onCreate方法中添加如下处理:
localApps = getPackageManager().queryIntentActivities(mainIntent, 0);
PackageListCache.setMainActivity(this);
PackageManager pManager = MainActivity.this.getPackageManager();
if (localApps.size() > 0) {
for (int i = 0; i < localApps.size(); i++) {
ActivityInfo act = localApps.get(i).activityInfo;
PackageListCache.addPackage(act.packageName, new JSONObject().fluentPut("name", act.name).fluentPut("label", localApps.get(i).loadLabel(pManager).toString()));
}
}
1.4 在自定义应用中启动其他应用
String pkgName;//PackageListCache的PACKAGE_2_ACTIVITY中的key,即某个应用的包名
ComponentName componet = new ComponentName(pkgName, list.get(pkgName).getString("name"));
Intent intent = new Intent();
intent.setComponent(componet);
PackageListCache.getMainActivity().startActivity(intent);
1.5 说明
完成如上设置并启动自定义应用后,再点击系统home键会弹出桌面选项,可将当前自定义应用设置为默认桌面(如果设置为永久桌面,可在设置>应用>当前自定义应用>清除默认设置 来解除永久桌面)。