从程序中启动隐藏的Android设置活动

时间:2011-06-20 03:52:48

标签: android android-activity android-intent

我正在尝试从程序中启动Android网络共享设置菜单,但它是其名称中包含斜杠的半隐藏菜单之一(com.android.settings / .tether.Tether)而我是不知道我应该把它称为什么。这是我到目前为止所尝试的:

Intent intent = new Intent();
intent.setClassName("com.android.settings", "com.android.settings/.tether.Tether");
startActivity(intent);

我也尝试过setClassName行中的“com.android.settings /”

然而,不管怎样,它说它找不到类:

  

I / ActivityManager(51):开始活动:Intent {act = android.intent.action.MAIN cmp = com.android.settings / com.android.settings / .tether.Tether}   D / AndroidRuntime(254):关闭VM   W / dalvikvm(254):threadid = 3:线程退出未捕获的异常(组= 0x4001b188)   E / AndroidRuntime(254):未捕获的处理程序:由于未捕获的异常而导致线程主要退出   E / AndroidRuntime(254):java.lang.RuntimeException:无法启动活动ComponentInfo {com.zzzz.launcher / com.zzzz.launcher.Launcher}:> android.content.ActivityNotFoundException:无法找到显式活动类> {com.android.settings / com.android.settings / .tether.Tether};你有没有在AndroidManifest.xml中声明这个活动?

我的清单文件中列出了以下活动:

<activity android:name="com.android.settings/.tether.Tether" />

(我还尝试用反斜杠逃避斜线)

似乎没有与之关联的任何关联的Settings。*值,因此通常的启动方式如下所示:

startActivity(new Intent(Settings.ACTION_TETHER_SETTINGS));

...但即便如此,我仍然想学习如何使用它的类名启动它,因为其他类的名称中包含斜杠(例如com.android.settings./proxySelector),我我想以类似的方式发射。

干杯,

(进一步的堆栈跟踪:)

  

I / ActivityManager(59):开始活动:Intent {act = android.intent.action.MAIN cat = [android.intent.category.LAUNCHER] flg = 0x10200000 cmp = com.zzzz.launcher / .ProxySet bnds = [163,240] [237,319]}   I / ActivityManager(59):启动proc com.zzzz.launcher以获取活动com.zzzz.launcher / .ProxySet:pid = 397 uid = 10040 gids = {1015}   I / ActivityManager(59):开始活动:Intent {cmp = com.android.settings / .ProxySelector}   D / AndroidRuntime(397):关闭VM   W / dalvikvm(397):threadid = 1:线程退出,未捕获异常(组= 0x4001d800)   E / AndroidRuntime(397):致命异常:主要   E / AndroidRuntime(397):java.lang.RuntimeException:无法启动活动ComponentInfo {com.zzzz.launcher / com.zzzz.launcher.ProxySet}:android.content.ActivityNotFoundException:无法找到显式活动类{com.android .settings / .ProxySelector};你有没有在AndroidManifest.xml中声明这个活动?

2 个答案:

答案 0 :(得分:6)

对于Tether设置,正确的包/类名称为“com.android.settings”,“com.android.settings.TetherSettings”

Intent tetherSettings = new Intent();
tetherSettings.setClassName("com.android.settings", "com.android.settings.TetherSettings");
startActivity(tetherSettings);

答案 1 :(得分:2)

com.android.settings/.tether.Tether分为两部分。斜杠之前的第一个是包名。斜杠之后的第二个是类名。在您使用它们的上下文中,必须单独指定它们。

您的代码存在多个问题:

  1. intent.setClassName("com.android.settings", "com.android.settings/.tether.Tether");应为intent.setClassName("com.android.settings", ".tether.Tether");

  2. 您不应该在清单中列出活动;只有在你实现这个类时才应该这样做。它只询问您是否在清单中列出了活动,因为它假设您自己实施了该活动。