[Информационная безопасность, Java, Разработка под Android, GitHub] Пишем паническую кнопку под андроид (Часть 2)
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
На связи снова Алексей который спешит уже с техническими подробностями проекта) В этой части узнаем как работают триггеры в приложении и поговорим о проблемах Google Play! Данная часть будет больше предыдущей так что берите напиток по погоде и погружайтесь в статью!Под капотомКак я писал раньше- в ранних версиях был один основной триггер - ярлык обманка. В чем же его суть? Пользователь сам задает иконку и название ярлыка под которое он маскируется, а в последних версиях открывает приложение с заданным именем пакета! Ниже на скриншотах вы можете посмотреть как делается ярлык вайбераСкриншоты
Главный экран
Выбор иконки
Какой пакет выбирать
Готовый ярлыкВсе значения сохраняются в преференсы, лично я для быстрого доступа использую TinyDB, а для выбора файлов в приложении FilePicker. После добавления ярлыка с помощью вот такого кода: Код
public void addcustomshrt(View view){
String iconpath = tinydb.getString("icon");
String nameoftag = tinydb.getString("label");
File check = new File(iconpath);
if (check.exists() && !check.isDirectory()){
Bitmap bitmap = BitmapFactory.decodeFile(iconpath);
if (ShortcutManagerCompat.isRequestPinShortcutSupported(ShortcutSettings.this))
{
ShortcutInfoCompat shortcutInfo = new ShortcutInfoCompat.Builder(ShortcutSettings.this, "#1")
.setIntent(new Intent(getApplicationContext(), ShortcutLaunch.class).setAction(Intent.ACTION_MAIN))
.setShortLabel(nameoftag)
.setIcon(IconCompat.createWithBitmap(bitmap))
.build();
ShortcutManagerCompat.requestPinShortcut(ShortcutSettings.this, shortcutInfo, null);
}
tinydb.putBoolean("short",true);
}else{
new AndExAlertDialog.Builder(this)
.setTitle(getResources().getString(R.string.error))
.setMessage(getResources().getString(R.string.short1))
.setPositiveBtnText("Ok")
.setCancelableOnTouchOutside(false)
.OnPositiveClicked(new AndExAlertDialogListener() {
@Override
public void OnClick(String input) {
final String rootPath = Environment.getExternalStorageDirectory().getAbsolutePath();
showListItemDialog("Select png, jpg, ico file", rootPath, FILE_ONLY_DIRECT_CHOICE_IMMEDIATE, PICK_DIALOG);
}
})
.build();
}}
Объяснение В этой строке мы говорим что наш ярлык открывает нужную активити которая и запускает наш заранее введенный пакет приложения:
.setIntent(new Intent(getApplicationContext(), ShortcutLaunch.class).setAction(Intent.ACTION_MAIN))
public void openapp(){
tinydb = new TinyDB(this);
if( tinydb.getString("apppkg").length()>3){
Intent launchIntent = getPackageManager().getLaunchIntentForPackage(tinydb.getString("apppkg"));
if (launchIntent != null){
startActivity( launchIntent );
}
}
finish();
}
После чего с помощью метода finish(); приложение остаётся незаметным глазу ведь сразу закрывается, а поверх открывается выбранноеКак запускаются действия?Тут была мини война с гуглом и miui. Если с первой можно было справиться с помощью сервиса в фоне, то миюай просто рубит автозапуск. Пришлось просто просить пользователя что бы он вручную включил эту злополучную галочку.. Есть основной сервис который запускается с помощью триггера, триггер передает какой именно сценарий применить через extra. После чего проверяется список действий и соответственно запускаются Код запуска
Intent intent = new Intent(this, StartActions.class);
intent.putExtra("from","shortcut");
startService(intent);
Код обработки
if (from.equals("shortcut")){ List<String> actions = tinydb.getListString("shortactions");
for (int i =0;i<actions.size();i++){
if (actions.get(i).equals("Delete Apps")){try {deleteapps(clean,root,list); }catch (IOException e){e.printStackTrace();}}
if (actions.get(i).equals("Delete files")){startdelete(list2);}
if (actions.get(i).equals("Crypt folders")){try{ startcrypter();} catch (Exception e){e.printStackTrace();}}
if (actions.get(i).equals("Send Sms")){sendsms(list4,msg);}
if (actions.get(i).equals("Power off")){Intent i2 = new Intent("android.intent.action.ACTION_REQUEST_SHUTDOWN");
i2.putExtra("android.intent.extra.KEY_CONFIRM", true);
i2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getApplicationContext().startActivity(i2);}
}
}
И так примерно для каждого триггера, так как пользователь отключает уведомление от приложения (ну мы просим :) ), удаление происходит в фоне и незаметноЧто там с маркетами?Google Play - отдельная история. Мне удалось загрузить только самую первую публичную версию приложения, а после добавления триггера на смс гугл плей пошел в отказ. Более 10 обращений на одобрение деклараций(Обработчик по умолчанию, автоматизация устройств и т.д.) и 2-3 обращение в службу поддержки по разрешениям - результата 0, видите ли не основная функция - значит не надо. Доступ к камере, местоположению в фоне, полный доступ к памяти - одобрено. Но вот смс не в какую (Кстати у кого был опыт, может я что то не так делаю? Или есть те кто готов помочь с этим, отпишите в комментариях. Я допускаю что что-то делаю неправильно хотя что именно никто сказать не может...)F-Droid - честно для меня (более менее уверенного пользователя линукс) стал ужасом в плане публикации приложения.. просил даже нескольких знакомых, не вышло.. так что публикация тут пока тоже отложена Про остальные менее известные я даже не пытался, почти все свободное время уходит на разработку, а ещё нужно за что-то кушать и учёба и повышение навыков - не последнее делоНа этом пока статья подошла к концу, в следующих статьях будет бороться с прошивками, искать баги в системе защиты андроид и ещё немного интересного!Все ваши идеи я тоже читаю и записываю, но увы я могу уделять приложению пока что нет так много времени как хотелось бы!..
===========
Источник:
habr.com
===========
Похожие новости:
- [JavaScript, Разработка мобильных приложений] Разработка под iOS без Xcode
- [JavaScript] Как я писал тестовое задание на Angular и почему некоторым разработчикам не стоит давать тестовое задание
- [Управление проектами, Agile] Что такое пользовательская история? (перевод)
- [JavaScript, Node.JS] Создаем свой сайт или блог на Ghost в образе Docker
- [Системное администрирование, *nix, Хранение данных] Траблшутинг DRBD9 в LINSTOR
- [Информационная безопасность, Java, Разработка под Android, Хакатоны] Пишем паническую кнопку под Android (Часть 1)
- [JavaScript, Алгоритмы] Быстрая математика для графиков, на примере вычисления среднего
- [Информационная безопасность] Как обезопасить себя от утечек при работе в VDR (виртуальной комнате данных)
- [Информационная безопасность] ТОП-3 ИБ-событий недели по версии Jet CSIRT
- [Разработка мобильных приложений, Управление разработкой, Управление проектами, Управление персоналом] Масштабируем команду мобильной разработки: как мы в Ozon справились с ростом до 44 iOS, Android и QA на одном приложении
Теги для поиска: #_informatsionnaja_bezopasnost (Информационная безопасность), #_java, #_razrabotka_pod_android (Разработка под Android), #_github, #_huntmix, #_security, #_android, #_java, #_open_source, #_application, #_development, #_story, #_blog_kompanii_huntmix_apps (
Блог компании Huntmix apps
), #_informatsionnaja_bezopasnost (
Информационная безопасность
), #_java, #_razrabotka_pod_android (
Разработка под Android
), #_github
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 03:16
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
На связи снова Алексей который спешит уже с техническими подробностями проекта) В этой части узнаем как работают триггеры в приложении и поговорим о проблемах Google Play! Данная часть будет больше предыдущей так что берите напиток по погоде и погружайтесь в статью!Под капотомКак я писал раньше- в ранних версиях был один основной триггер - ярлык обманка. В чем же его суть? Пользователь сам задает иконку и название ярлыка под которое он маскируется, а в последних версиях открывает приложение с заданным именем пакета! Ниже на скриншотах вы можете посмотреть как делается ярлык вайбераСкриншоты Главный экран Выбор иконки Какой пакет выбирать Готовый ярлыкВсе значения сохраняются в преференсы, лично я для быстрого доступа использую TinyDB, а для выбора файлов в приложении FilePicker. После добавления ярлыка с помощью вот такого кода: Код public void addcustomshrt(View view){
String iconpath = tinydb.getString("icon"); String nameoftag = tinydb.getString("label"); File check = new File(iconpath); if (check.exists() && !check.isDirectory()){ Bitmap bitmap = BitmapFactory.decodeFile(iconpath); if (ShortcutManagerCompat.isRequestPinShortcutSupported(ShortcutSettings.this)) { ShortcutInfoCompat shortcutInfo = new ShortcutInfoCompat.Builder(ShortcutSettings.this, "#1") .setIntent(new Intent(getApplicationContext(), ShortcutLaunch.class).setAction(Intent.ACTION_MAIN)) .setShortLabel(nameoftag) .setIcon(IconCompat.createWithBitmap(bitmap)) .build(); ShortcutManagerCompat.requestPinShortcut(ShortcutSettings.this, shortcutInfo, null); } tinydb.putBoolean("short",true); }else{ new AndExAlertDialog.Builder(this) .setTitle(getResources().getString(R.string.error)) .setMessage(getResources().getString(R.string.short1)) .setPositiveBtnText("Ok") .setCancelableOnTouchOutside(false) .OnPositiveClicked(new AndExAlertDialogListener() { @Override public void OnClick(String input) { final String rootPath = Environment.getExternalStorageDirectory().getAbsolutePath(); showListItemDialog("Select png, jpg, ico file", rootPath, FILE_ONLY_DIRECT_CHOICE_IMMEDIATE, PICK_DIALOG); } }) .build(); }} .setIntent(new Intent(getApplicationContext(), ShortcutLaunch.class).setAction(Intent.ACTION_MAIN))
public void openapp(){
tinydb = new TinyDB(this); if( tinydb.getString("apppkg").length()>3){ Intent launchIntent = getPackageManager().getLaunchIntentForPackage(tinydb.getString("apppkg")); if (launchIntent != null){ startActivity( launchIntent ); } } finish(); } Intent intent = new Intent(this, StartActions.class);
intent.putExtra("from","shortcut"); startService(intent); if (from.equals("shortcut")){ List<String> actions = tinydb.getListString("shortactions");
for (int i =0;i<actions.size();i++){ if (actions.get(i).equals("Delete Apps")){try {deleteapps(clean,root,list); }catch (IOException e){e.printStackTrace();}} if (actions.get(i).equals("Delete files")){startdelete(list2);} if (actions.get(i).equals("Crypt folders")){try{ startcrypter();} catch (Exception e){e.printStackTrace();}} if (actions.get(i).equals("Send Sms")){sendsms(list4,msg);} if (actions.get(i).equals("Power off")){Intent i2 = new Intent("android.intent.action.ACTION_REQUEST_SHUTDOWN"); i2.putExtra("android.intent.extra.KEY_CONFIRM", true); i2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); getApplicationContext().startActivity(i2);} } } =========== Источник: habr.com =========== Похожие новости:
Блог компании Huntmix apps ), #_informatsionnaja_bezopasnost ( Информационная безопасность ), #_java, #_razrabotka_pod_android ( Разработка под Android ), #_github |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 03:16
Часовой пояс: UTC + 5