Запустите скрытое действие настроек Android из программы - PullRequest
0 голосов
/ 20 июня 2011

Я пытаюсь запустить меню настроек Android-модема из программы, однако это одно из тех полускрытых меню с косой чертой в имени (com.android.settings / .tether.Tether), и я не уверен, что я должен ссылаться на это. Это то, что я пробовал до сих пор:

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

Я также попробовал "com.android.settings /" в строке setClassName

Однако, в любом случае, он говорит, что не может найти класс:

I / ActivityManager (51): Начальная деятельность: Intent {act = android.intent.action.MAIN cmp = com.android.settings / com.android.settings / .tether.Tether} D / AndroidRuntime (254): выключение виртуальной машины W / dalvikvm (254): threadid = 3: поток завершается с необработанным исключением (группа = 0x4001b188) E / AndroidRuntime (254): обработчик Uncaught: выход из основного потока из-за исключения uncaught 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" />

(И я также попытался избежать косой черты с помощью обратной косой черты)

Похоже, что нет связанных с ним настроек. * Значение, связанное с ним, поэтому обычный способ запуска, подобный следующему, не будет работать:

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): Запустить процесс com.zzzz.launcher для действия com.zzzz.launcher / .ProxySet: pid = 397 uid = 10040 gids = {1015} I / ActivityManager (59): начало деятельности: намерение {cmp = com.android.settings / .ProxySelector} D / AndroidRuntime (397): выключение виртуальной машины 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 ]

6 голосов
/ 03 ноября 2012

Для настроек Tether правильное имя пакета / класса: «com.android.settings», «com.android.settings.TetherSettings»

Intent tetherSettings = new Intent();
tetherSettings.setClassName("com.android.settings", "com.android.settings.TetherSettings");
startActivity(tetherSettings);
2 голосов
/ 20 июня 2011

com.android.settings/.tether.Tether состоит из двух частей.Первое, перед косой чертой, это имя пакета.Второе, после косой черты, - это имя класса.В контекстах, в которых вы их используете, они должны указываться отдельно.

С вашим кодом несколько проблем:

  1. intent.setClassName("com.android.settings", "com.android.settings/.tether.Tether"); должно быть intent.setClassName("com.android.settings", ".tether.Tether");

  2. Вы не должны указывать активность в своем манифесте;это должно быть сделано ТОЛЬКО если вы реализуете класс.Он только спросил, есть ли у вас действие, указанное в вашем манифесте, потому что предполагал, что вы выполняете его самостоятельно.

...