2014-03-13 37 views
0

当我的主屏幕从默认值被清除时,我可以发出这个意图来触发“启动器选择器对话框”,在那里我可以选择默认的启动器。在不离开当前活动的情况下设置启动器

 Intent i = new Intent(Intent.ACTION_MAIN); 
     i.addCategory(Intent.CATEGORY_HOME); 
     i.addCategory(Intent.CATEGORY_DEFAULT); 
     i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     startActivityForResult(i, 1); 

的问题是,当用户选择了一个发射器,我的任务就是带回来的新的发射前景上来。

我试图通过推出意图为选择器:

startActivity(Intent.createChooser(i, "Choose one")); 

但是这是行不通的。

有没有办法在设置新启动器时保持当前活动可见?

+0

我相信这是可能的,但我不知道怎么办。 Nova Launcher实现了这个确切的事情。当您在其菜单中按下“选择默认主页”时,Nova会在用户选择默认启动器时进入“后退/可见”状态。 – KickAss

+0

@KickAss是的,我相信,我也看到了它在其他应用程序! – Sebastian

+0

一秒钟,我正在看Nova发射器的源代码(嘘!) – KickAss

回答

0

好吧,Nova Launcher使用这个(我认为)。这是他们的HomeReset类。

public class HomeReset 
    extends Activity 
{ 
    public static ComponentName D(PackageManager paramPackageManager) 
    { 
    ComponentName localComponentName = null; 
    try 
    { 
     Intent localIntent = new Intent("android.intent.action.MAIN", null); 
     localIntent.addCategory("android.intent.category.HOME"); 
     localIntent.addFlags(270532608); 
     localComponentName = localIntent.resolveActivity(paramPackageManager); 
     if (("android".equals(localComponentName.getPackageName())) && ("com.android.internal.app.ResolverActivity".equals(localComponentName.getClassName()))) { 
     return null; 
     } 
     return localComponentName; 
    } 
    catch (Exception localException) 
    { 
     Log.e("HomeReseter", "Exception when trying to find default home", localException); 
    } 
    return localComponentName; 
    } 

    public static Intent D() 
    { 
    Intent localIntent = new Intent("android.intent.action.MAIN", null); 
    localIntent.addCategory("android.intent.category.HOME"); 
    localIntent.addFlags(270532608); 
    return localIntent; 
    } 

    public static void D(Activity paramActivity) 
    { 
    PackageManager localPackageManager = paramActivity.getPackageManager(); 
    localPackageManager.setComponentEnabledSetting(new ComponentName(paramActivity.getPackageName(), "com.teslacoilsw.launcher.homereset.HomeReset"), 1, 1); 
    Intent localIntent = new Intent("android.intent.action.MAIN", null); 
    localIntent.addCategory("android.intent.category.HOME"); 
    localIntent.addFlags(270532608); 
    localIntent.addFlags(268435456); 
    localIntent.putExtra("homereset_return_to_settings", true); 
    paramActivity.startActivity(localIntent); 
    localPackageManager.setComponentEnabledSetting(new ComponentName(paramActivity.getPackageName(), "com.teslacoilsw.launcher.homereset.HomeReset"), 2, 1); 
    paramActivity.startActivity(localIntent); 
    } 

    public void onCreate(Bundle paramBundle) 
    { 
    super.onCreate(paramBundle); 
    Context localContext = getApplicationContext(); 
    PackageManager localPackageManager = getPackageManager(); 
    localPackageManager.setComponentEnabledSetting(new ComponentName(localContext.getPackageName(), "com.teslacoilsw.launcher.homereset.HomeReset"), 1, 1); 
    Intent localIntent1 = new Intent("android.intent.action.MAIN", null); 
    localIntent1.addCategory("android.intent.category.HOME"); 
    localIntent1.addFlags(270532608); 
    localIntent1.setFlags(268435456); 
    localContext.startActivity(localIntent1); 
    localPackageManager.setComponentEnabledSetting(new ComponentName(localContext.getPackageName(), "com.teslacoilsw.launcher.homereset.HomeReset"), 2, 1); 
    Intent localIntent2 = new Intent("android.intent.action.MAIN", null); 
    localIntent2.addCategory("android.intent.category.HOME"); 
    localIntent2.addFlags(270532608); 
    localIntent2.setFlags(402653184); 
    localContext.startActivity(localIntent2); 
    } 
} 

这有帮助吗?我无法找到它的R.Java文件,因为它被混淆了,所以我不能告诉你这些ID参考。

编辑:我认为这是如何启动上述活动。这是从他们的SettingsActivity

... 
     Preference localPreference = findPreference("select_home"); 
     if (localPreference == null) { 
     return; 
     } 
     Object localObject = null; 
     PackageManager localPackageManager = getActivity().getPackageManager(); 
     ComponentName localComponentName = HomeReset.D(localPackageManager); 
     if (localComponentName != null) {} 
     try 
     { 
     localObject = localPackageManager.getActivityInfo(localComponentName, 0).loadLabel(localPackageManager); 
     } 
     catch 
... 
+0

感谢您的信息!尽管如此,它很难掌握:/ 每次他们做addFlags()时,它们之间的混乱数字就是一个consant?像Intent.FLAG_ACTIVITY_NEW_TASK? – Sebastian

+0

是的,这是你在R.java文件中找到的引用。但是我无法在项目中找到该文件,因为它是混乱的。不幸的是,我是一个初学者,这是我能帮到你的最多。也许有一种方法可以将这些常量/ ID引用转换为实际的单词。搜索它:) – KickAss

相关问题