Почему для запуска службы из командной строки в Android требуется доступ root (su)? - PullRequest
2 голосов
/ 30 мая 2020

Я пытаюсь запустить службу другого приложения (не моего) из командной строки в моем приложении Android. Но я заметил, что это работает, только если я запускаю «su». У меня телефон конечно "рутирован". Может быть, есть другой способ запустить службу приложения без необходимости выполнять команду оболочки?

Этот код работает:

   try {
                            Process process = Runtime.getRuntime().exec("su", null,null);
                            OutputStream outputStream = process.getOutputStream();

                            outputStream.write(("am startservice -a com.companyname.notmyapp.TEST --option a 1").getBytes("ASCII"));

                            outputStream.flush();
                            outputStream.close();
                            process.waitFor();
                        } catch (IOException e) {
                            e.printStackTrace();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }

Этот не работает:

   try {
                            Process process = Runtime.getRuntime().exec("am startservice -a com.companyname.notmyapp.TEST --option a 1", null,null);
                            //OutputStream outputStream = process.getOutputStream();
                            //outputStream.flush();
                            //outputStream.close();
                            process.waitFor();
                        } catch (IOException e) {
                            e.printStackTrace();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }

1 Ответ

0 голосов
/ 30 мая 2020

Намерение намерения = новое намерение (Intent.ACTION_VIEW); Строка packageName = "com.ang.chapter_2_service"; // имя пакета, который вы хотите запустить

String className = "com.ang.chapter_2.poolBinder.BinderPoolService"; // полное имя службы, которую вы хотите запустить intent.setClassName (packageName, className); startService (intent); // или bindService (intent, mConnection, Context.BIND_AUTO_CREATE);

действие такое же, как и здесь.

Конечно, для службы или действия, которое вы хотите запустить, нужен тег в манифесте. xml:

android:exported="true"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...