Makaroff Опубликовано 12 октября, 2016 Поделиться Опубликовано 12 октября, 2016 Не могу разобраться, каким образом можно выполнить перезагрузку или выключение андроид-устройства. Для Java существует класс PowerManager, но в JNI такого я не нашел. Подскажите пожалуйста решение. Цитата Ссылка на комментарий
0 Администраторы Brovin Yaroslav Опубликовано 12 октября, 2016 Администраторы Поделиться Опубликовано 12 октября, 2016 Androidapi.JNI.OS.pas файл содержит JPowerManager. Равиль Зарипов (ZuBy) 1 Цитата Ссылка на комментарий
0 Makaroff Опубликовано 12 октября, 2016 Автор Поделиться Опубликовано 12 октября, 2016 16 минут назад, Brovin Yaroslav сказал: Androidapi.JNI.OS.pas файл содержит JPowerManager. В XE10 в Androidapi.JNI.OS.pas нет. Androidapi.JNI.Os.doc Цитата Ссылка на комментарий
0 Администраторы Brovin Yaroslav Опубликовано 12 октября, 2016 Администраторы Поделиться Опубликовано 12 октября, 2016 Понял, тогда посмотрите готовые обертки для всего андроид апи. Равиль Зарипов (ZuBy) и Makaroff 2 Цитата Ссылка на комментарий
0 Makaroff Опубликовано 12 октября, 2016 Автор Поделиться Опубликовано 12 октября, 2016 5 часов назад, Brovin Yaroslav сказал: Понял, тогда посмотрите готовые обертки для всего андроид апи. Спасибо. Скачал библиотеки. Теперь возникла проблема с преобразованием типов string -> jstring :))) Цитата PowerObj := TAndroidHelper.Context.getSystemService(TJContext.JavaClass.POWER_SERVICE); PowerManager := TJPowerManager.Wrap((PowerObj as ILocalObject).GetObjectID); PowerManager.reboot('null'); //'null' должен быть в jstring Не понимаю, как конвертировать. Цитата Ссылка на комментарий
0 Администраторы Brovin Yaroslav Опубликовано 12 октября, 2016 Администраторы Поделиться Опубликовано 12 октября, 2016 34 минуты назад, Makaroff сказал: Не понимаю, как конвертировать. StringToJString Makaroff 1 Цитата Ссылка на комментарий
0 Pax Beach Опубликовано 13 октября, 2016 Поделиться Опубликовано 13 октября, 2016 12 часов назад, Makaroff сказал: Не могу разобраться, каким образом можно выполнить перезагрузку или выключение андроид-устройства. Для Java существует класс PowerManager, но в JNI такого я не нашел. Подскажите пожалуйста решение. Просьба выложить для всех пример кода решения для перезагрузки телефона. Были грабли с использованием? Какие пермишены потребовались? Rusland 1 Цитата Ссылка на комментарий
0 Makaroff Опубликовано 14 октября, 2016 Автор Поделиться Опубликовано 14 октября, 2016 (изменено) В 12.10.2016 в 23:44, Brovin Yaroslav сказал: StringToJString Спасибо. Я подозревал, что должно быть нечто подобное, перелопатил кучу библиотек, но до Helpers не дошел :))) В 13.10.2016 в 04:49, Pax Beach сказал: Просьба выложить для всех пример кода решения для перезагрузки телефона. Были грабли с использованием? Какие пермишены потребовались? К сожалению, то что я приводил выше по аналогии с явой не заработало. Вылетает. Доступ ставил как советуют для явы: reboot и wake lock Изменено 14 октября, 2016 пользователем Makaroff Цитата Ссылка на комментарий
0 Модераторы Равиль Зарипов (ZuBy) Опубликовано 14 октября, 2016 Модераторы Поделиться Опубликовано 14 октября, 2016 так я тут покапался чуток uses FMX.Helpers.Android, AndroidApi.Helpers, AndroidApi.JNI.JavaTypes, AndroidApi.JNIBridge, AndroidApi.JNI.GraphicsContentViewText, Android.os.PowerManager; function HasPermission(const Permission: string): Boolean; begin Result := TAndroidHelper.Context.checkSelfPermission(StringToJString(Permission)) = TJPackageManager.JavaClass.PERMISSION_GRANTED; end; var PowerObj: JObject; PowerManager: JPowerManager; begin if HasPermission('android.permission.WAKE_LOCK') then // доступ есть begin if HasPermission('android.permission.REBOOT') then // доступа НЕТ begin PowerObj := TAndroidHelper.Context.getSystemService(TJContext.JavaClass.POWER_SERVICE); PowerManager := TJPowerManager.Wrap((PowerObj as ILocalObject).GetObjectID); PowerManager.reboot(nil); end else Log.d('android.permission.REBOOT == DENIED'); end else Log.d('android.permission.WAKE_LOCK == DENIED'); если убираем проверку разрешения REBOOT Цитата Project prjPower.apk raised exception class EJNIFatal with message 'Invoke error: method not found'. https://developer.android.com/reference/android/Manifest.permission.html#REBOOT Цитата REBOOT Required to be able to reboot the device. Not for use by third-party applications. Constant Value: "android.permission.REBOOT" этот способ только для системы, извне его не вызвать. Есть еще два способа 1) через SuperUser (Только этот способ остается) 2) через Intent (отменяется) Цитата ACTION_REBOOT Broadcast Action: Have the device reboot. This is only for use by system code. This is a protected intent that can only be sent by the system. Constant Value: "android.intent.action.REBOOT Makaroff, Andrey Efimov, Pax Beach и 1 другой 4 Цитата Ссылка на комментарий
0 Makaroff Опубликовано 14 октября, 2016 Автор Поделиться Опубликовано 14 октября, 2016 (изменено) 2 часа назад, ZuBy сказал: 1) через SuperUser (Только этот способ остается) С помощью Runtime.getRuntime()? TJRuntime.JavaClass.getRuntime().exec(StringToJString('su -c reboot')); Я пробовал в разных вариациях, у меня error exec при выполнении. Работающий пример никак не могут найти. Изменено 14 октября, 2016 пользователем Makaroff Цитата Ссылка на комментарий
0 Модераторы Равиль Зарипов (ZuBy) Опубликовано 14 октября, 2016 Модераторы Поделиться Опубликовано 14 октября, 2016 2 минуты назад, Makaroff сказал: С помощью Runtime.getRuntime()? TJRuntime.JavaClass.getRuntime().exec(StringToJString('su -c reboot')); Я пробовал в разных вариациях, у меня error exec при выполнении. а перед этим, запрос на su делали? Цитата Ссылка на комментарий
0 Makaroff Опубликовано 14 октября, 2016 Автор Поделиться Опубликовано 14 октября, 2016 2 минуты назад, ZuBy сказал: а перед этим, запрос на su делали? Нет, а как? Цитата Ссылка на комментарий
0 Модераторы Равиль Зарипов (ZuBy) Опубликовано 14 октября, 2016 Модераторы Поделиться Опубликовано 14 октября, 2016 9 минут назад, Makaroff сказал: Нет, а как? https://magnumlabs.wordpress.com/2015/10/24/delphiandroid-touching-root/ Цитата Ссылка на комментарий
0 Makaroff Опубликовано 14 октября, 2016 Автор Поделиться Опубликовано 14 октября, 2016 (изменено) А без SuperSU вообще никаких вариантов? На "чистом" устройстве? Это тоже не прокатит?: https://stackoverflow.com/questions/3635101/how-to-sign-android-app-with-system-signature Изменено 14 октября, 2016 пользователем Makaroff Цитата Ссылка на комментарий
0 Модераторы Равиль Зарипов (ZuBy) Опубликовано 14 октября, 2016 Модераторы Поделиться Опубликовано 14 октября, 2016 18 минут назад, Makaroff сказал: А без SuperSU вообще никаких вариантов? На "чистом" устройстве? нет, и это правильно Я бы не хотел чтобы любое приложение могло перезагрузить девайс #WAMACO, Kitty и Andrey Efimov 3 Цитата Ссылка на комментарий
0 Makaroff Опубликовано 14 октября, 2016 Автор Поделиться Опубликовано 14 октября, 2016 (изменено) 35 минут назад, ZuBy сказал: Я бы не хотел чтобы любое приложение могло перезагрузить девайс Так для этого и существуют "разрешения". Я смотрю возможности приложения при установке и сам принимаю решение о том, ставить его или нет. А так получается, что меня ограничивают в свободе выбора и толкают фактически на взлом устройства. В любом случае спасибо за помощь. Изменено 14 октября, 2016 пользователем Makaroff Цитата Ссылка на комментарий
0 Модераторы Равиль Зарипов (ZuBy) Опубликовано 14 октября, 2016 Модераторы Поделиться Опубликовано 14 октября, 2016 1 минуту назад, Makaroff сказал: Так для этого и существуют "разрешения". Я смотрю возможности приложения при установке и сам принимаю решение о том, ставить его или нет. А так получается, что меня ограничивают в свободе выбора и вынуждают фактически на взлом устройства. разрешения сделаны в том числе для фильтрации в маркете, а обычный юзер не смотрит на них. для него это просто кнопка "Принять" в андроид 6 сделали запрос на использование этого функционала (слизали у эпл конечно, но это правильный ход) #WAMACO 1 Цитата Ссылка на комментарий
Вопрос
Makaroff
Не могу разобраться, каким образом можно выполнить перезагрузку или выключение андроид-устройства.
Для Java существует класс PowerManager, но в JNI такого я не нашел.
Подскажите пожалуйста решение.
Ссылка на комментарий
16 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.