首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有办法启动股票主页启动器(即使它目前没有设置为‘默认’)?

有没有办法启动股票主页启动器(即使它目前没有设置为‘默认’)?
EN

Stack Overflow用户
提问于 2013-02-15 00:06:42
回答 2查看 157关注 0票数 0

我很好奇,如果设备有一个默认的备用Home应用程序,人们会如何启动现有的Android Home启动器。

目前我使用的是

代码语言:javascript
复制
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(startMain);

但这只在默认启动器是Android启动器的情况下才起作用。我需要的是一种方法来启动Android启动器,无论用户已经设置为他们的原生主页的应用程序。

有没有办法做到这一点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-16 03:21:55

没有人附和,但我发现这是一个有效的解决方案。

唯一的问题是,您需要指定正在查找的包名的某个部分(因为您可能是在多个应用程序已注册为HOME的情况下执行此操作)。

下面的代码处理了我测试过的所有设备,但显然不是未来的证明。

代码语言:javascript
复制
     void getDefaultLauncher() {    

        final Intent intent = new Intent(Intent.ACTION_MAIN); 
        intent.addCategory(Intent.CATEGORY_HOME); 
        final List<ResolveInfo> list = ((PackageManager)getPackageManager()).queryIntentActivities(intent, 0);      


        //String className = null;
        for(ResolveInfo ri : list){
            Log(TAG,"FOUND NATIVE LAUNCH ACTIVITY " + ri.activityInfo.packageName);


                 if(ri.activityInfo.packageName.contains("com.lge") ||
                 ri.activityInfo.packageName.contains("android") || 
                 ri.activityInfo.packageName.contains("motorola.homescreen")  || 
                 ri.activityInfo.packageName.contains("htc.launcher") ){

                startSpecificActivity(ri);
                return;
            }
        }

        Log(TAG,"DIDN'T FIND MATCHING HOME APP");       
    }




 public void startSpecificActivity(ResolveInfo launchable) {

     ActivityInfo activity=launchable.activityInfo;

     ComponentName name=new ComponentName(activity.applicationInfo.packageName,   activity.name);

    Intent i=new Intent(Intent.ACTION_MAIN);
    i.addCategory(Intent.CATEGORY_LAUNCHER);
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
                    Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
    i.setComponent(name);
    startActivity(i);    
}
票数 0
EN

Stack Overflow用户

发布于 2013-10-01 02:57:15

代码语言:javascript
复制
private void goHome() {
try {   
    PackageManager pm = getPackageManager();
    Intent i = new Intent("android.intent.action.MAIN");
    i.addCategory("android.intent.category.HOME");
    List<ResolveInfo> lst = pm.queryIntentActivities(i, 0);
    if (!lst.isEmpty()) {
       for (ResolveInfo resolveInfo : lst) {
           if ("com.my.package".equals(resolveInfo.activityInfo.packageName)) continue; 
           Intent intent = new Intent();
           intent.setClassName(resolveInfo.activityInfo.packageName, resolveInfo.activityInfo.name);
           intent.addCategory(Intent.CATEGORY_LAUNCHER);
           startActivity(intent);         
           }
    }       
} catch (Throwable t) {
    L.g().log(t);
}
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14879006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档