我正在尝试从程序中启动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中声明这个活动?
答案 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
分为两部分。斜杠之前的第一个是包名。斜杠之后的第二个是类名。在您使用它们的上下文中,必须单独指定它们。
您的代码存在多个问题:
intent.setClassName("com.android.settings", "com.android.settings/.tether.Tether");
应为intent.setClassName("com.android.settings", ".tether.Tether");
您不应该在清单中列出活动;只有在你实现这个类时才应该这样做。它只询问您是否在清单中列出了活动,因为它假设您自己实施了该活动。