Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.61/18: Рейтинг темы: голосов - 18, средняя оценка - 4.61
 Аватар для Abakus
4 / 3 / 1
Регистрация: 17.02.2018
Сообщений: 119

Несколько разнородных неясностей при создании приложения

27.02.2019, 20:44. Показов 4386. Ответов 60
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Возникло несколько вопросов. Чтоб не плодить темы изложу всё в одной....
1. Можно ли (и нужно) удалить из проекта стандартные векторные xml иконки приложения (созданные студией), если при этом созданы свои иконки .png под разные DPI ?
https://www.cyberforum.ru/atta... 1551289378
2. В приложении необходимо использовать определение местоположения. В манифесте есть запись
Java
1
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
и также
в коде есть метод, который получает координаты, а в нём созданная по подсказке студии какая-то хрень (см. ниже комментария).
Без этой записи студия выражает недовольство возможной некорректностью работы с новыми API. Что это означает, правильно ли я поступаю, используя подобную запись? на 6-ом андроиде, впрочем, работает. но как-то неприятно, когда сам не понимаешь что написал...

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 private void EmployGPS () {
        try {
            // проверим, если юзер включил в настройках GPS и checkBox для определения координат, то можно принимать координаты
            if (locationManager.isProviderEnabled(GPS_PROVIDER) && checkBox4.isChecked()) {
                Toast.makeText(SettingActivity.this, "Ждите! ЖПС уже ищет Ваше местоположение!", Toast.LENGTH_LONG).show();
                locationManager.requestLocationUpdates(GPS_PROVIDER, 3000, 100, locationListener);
            }
        } catch (SecurityException exc) {
            // какая-то хрень, по поводу отзыва полученного ранее разрешения, в новых версиях Аndroid... ничё не понятно - зачем ?
            if (ContextCompat.checkSelfPermission(this, ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(this, new String[]{ACCESS_FINE_LOCATION}, 1);
            }
        }
    } // конец метода
3. при работе приложения , когда оно запрашивает разрешения - выскакивает иногда и такое:
https://www.cyberforum.ru/atta... 1551288984
Это возможно из-за одновременного появления на экране toast-a и всплывающего окна запроса на разрешение ? или я ошибаюсь ? Как бы это побороть (желательно не отказываясь от toast-ов) ?
Миниатюры
Несколько разнородных неясностей при создании приложения   Несколько разнородных неясностей при создании приложения  
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.02.2019, 20:44
Ответы с готовыми решениями:

Несколько неясностей в C++
Здравствуйте, в процессе изучения C++ возникли вопросы. 1. Объявления и определения функции. С терминологией и сутью проблем не было. Но...

Как правильно передать несколько разнородных данных из одной формы в другую?
На форме MainForm много элементов управления (установка цвета, комбобоксы, numUpDown и другие), значения которых я хочу передать в форму...

Ошибка при создании приложения
Решил научиться работать в Android Studio. Установил её, запустил, решил запустить простейшее приложение с выводом &quot;Hello...

60
111 / 89 / 29
Регистрация: 07.01.2017
Сообщений: 456
27.02.2019, 20:50
Abakus, 1 - там видно, что только для 26+ API, эти иконки чуть иначе формируются (бэк и форенграунд есть), посмотри, из чего состоят, можешь выпилить и заменить + то, что синим - обычные иконки;
2 - https://developer.android.com/... requesting .
0
 Аватар для Abakus
4 / 3 / 1
Регистрация: 17.02.2018
Сообщений: 119
27.02.2019, 21:02  [ТС]
jaman_smk,
1.Да это понятно - векторные они, я ставил приложение на 8.0 Android (Oreo который.) встали эти стандартные. Если их удалить - установятся мои как я понимаю... не возникнет ли проблем на новейших версиях андроида ?
2. Ох, насколько бы меньше было вопросов (у меня) знай я английский ! Ну ничего - можно помучить переводчик (если пойму). А если кратко: Я всё правильно сделал ? или нельзя сказать однозначно ?
0
111 / 89 / 29
Регистрация: 07.01.2017
Сообщений: 456
27.02.2019, 21:14
Abakus, 1. если будет только .png - не возникнет;
2. нужно для того, чтобы пользователь знал, на что он согласие дает. Трекать расположение - сильно конфиденциально, не всем заходит, поэтому и с разрешения устанавливается. Важно отлавливать и те ситуации, когда отказ идет не в первый раз, и когда пользователь отказался давать разрешение вообще (обычно следует показать диалог, что разрешения нет и кнопку в Настройки вставить).
1
 Аватар для Abakus
4 / 3 / 1
Регистрация: 17.02.2018
Сообщений: 119
27.02.2019, 21:24  [ТС]
jaman_smk,
1. Ясно, Спасибо!
2. Да это и понятно, что только с согласия пользователя. Но что характерно, при установке приложения имеем сообщение, что приложению не требуется никаких разрешений. Но я то знаю, что это не так. В манифесте это прописано.
А потом только, когда при работе возникает обращение к функции GPS (см. приведенный метод) выскакивает и запрос на разрешение, и сообщение о каких-то наложениях (см. третью часть вопроса) и если дам разрешение - ещё и toast , мол подождите, геоданные уже в пути...
на Kitkat этого в помине нет. Только от 6.0 андроида и выше....
0
111 / 89 / 29
Регистрация: 07.01.2017
Сообщений: 456
27.02.2019, 21:30
Abakus, это с 6 Android и пошло (ссылку кидал). У тебя, скорее всего, настроено, чтобы запрос срабатывал только при взаимодействии с GPS (так и нужно делать, не особо хорошо пользователя тыкать в запросы при старте приложения).
0
 Аватар для Abakus
4 / 3 / 1
Регистрация: 17.02.2018
Сообщений: 119
27.02.2019, 21:45  [ТС]
jaman_smk, а обойти это дело никак нельзя? Я имею ввиду не молчаливая установка. Но запрос о том, что приложению может потребоваться доступ к GPS выдавать в момент установки (с возможностью отказа например).
А то ведь не логично:
при установке: - приложению не требуется никаких разрешений.
при работе: - дай разрешение, но прежде убери наложения. какие - такие наложения ? кто их знает...
или я как-то некорректно составил метод работы с gps ?
0
111 / 89 / 29
Регистрация: 07.01.2017
Сообщений: 456
28.02.2019, 06:45
Abakus, в момент установки - нет. https://developer.android.com/... ions?hl=ru . Дело в том, что пользователь может при установке отказаться, а потом, просто не найти возможности включить (если не сказать ему, что в настройках делается, но это - тот же самый диалог с разрешением). Наложения? Разрешения в Манифесте покажи, которые указаны.
0
 Аватар для Abakus
4 / 3 / 1
Регистрация: 17.02.2018
Сообщений: 119
28.02.2019, 15:57  [ТС]
ну в манифесте у меня только одно разрешение на точное местоположение, т. е. запись

XML
1
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
больше мне ничего особого и не нужно.
Есть смутная догадка, что это из за того, что в момент, когда появляется окно с просьбой дать разрешение на геолокацию одновременно выскакивает toast c надписью " Ждите! ЖПС уже ищет Ваше местоположение! " Хотя, это лишь моё предположение.....
Может в манифесте как-то прописать разрешение на одновременное использование нескольких всплывающих сообщений (в данном случае диалоговое окно запроса дать разрешение и toast) ? или как-то иначе от этого избавиться ?
0
111 / 89 / 29
Регистрация: 07.01.2017
Сообщений: 456
28.02.2019, 16:12
Abakus, https://fan-android.com/instru... eniya.html
0
 Аватар для Abakus
4 / 3 / 1
Регистрация: 17.02.2018
Сообщений: 119
28.02.2019, 16:37  [ТС]
jaman_smk,
кстати да. это так себя ведет на шестом андроиде..... (маршмалой который)
.... интересное чтиво. Особенно комментарии, и особенно этот: "Пипец андроид охренел ((( без этой статьи бы вообще не разобралась, спасибо автору! Выкинуть этот андоид и пользоваться ios - вот сейчас это единственное желание"
вот интересно - Google не стыдно ? За то, что подобные желания вызывают у пользователей...
То есть как я понял - однозначного решения нет.
цитата:
"в некоторых случаях вызывать появление ошибки может больше, чем одно приложение. Порой выявить "виновника" невероятно сложно. В таких случаях проще продолжить работу с новым приложением, запретив все из них, а затем повторно активировать программы из списка по мере необходимости."
0
111 / 89 / 29
Регистрация: 07.01.2017
Сообщений: 456
28.02.2019, 16:51
Abakus, это больше для ознакомления. У тебя явно вызывается, тоесть смотреть нужно, что вызвать может. Копать можно начать отсюда: https://stackoverflow.com/ques... other-apps (там примеры есть использования наложения, проверь, есть ли у тебя такое).
0
 Аватар для Abakus
4 / 3 / 1
Регистрация: 17.02.2018
Сообщений: 119
28.02.2019, 18:00  [ТС]
нет. в моем приложении ничего даже близко нет. Из всплывающего - только toast-ы .....
кстати о toast-е, и о том, почему я именно его подозреваю...
Вот я установил приложение, нажал на checkBox "Здесь! (по GPS)" (см. скрин из первого поста) - и сразу одновременно выскакивает запрос на "Разрешить приложению доступ к местоположению" и одновременно toast - "Ждите! ЖПС уже ищет Ваше местоположение!" (см. кусок кода из первого поста)
Tеперь если нажать на "Разрешить приложению доступ к местоположению" до того, как исчезнет toast (то есть быстро разрешить , пока toast не исчез) - то возникает это сообщение о наложениях. Но если подождать пока исчезнет toast и только потом нажать - "Разрешить приложению доступ к местоположению" , то никаких сообщений о наложении не появляется. Все работает в штатном режиме....
Можно конечно убрать toast из кода (см. мой первый пост) и проверить.... Но хотелось бы иметь иное решение......
0
111 / 89 / 29
Регистрация: 07.01.2017
Сообщений: 456
28.02.2019, 19:50
Abakus, не всмотрелся сразу. Измени обработку запроса разрешения: сначала чекаешь, есть ли оно, затем запрос. Toast выводи только при ситуации, когда разрешение есть, так как текст указывает та то, что запрос местоположения идет, хотя такого быть не может (ибо разрешение не выдано). Т.е.:

if (разрешение есть) показываешь Toast, выполняешь нужные действия else запрос разрешения без Toast.

Тебе вообще не нужен Toast, если разрешения нет, try - catch выпили, делй через if - else.
1
 Аватар для Abakus
4 / 3 / 1
Регистрация: 17.02.2018
Сообщений: 119
01.03.2019, 00:53  [ТС]
jaman_smk,
Отдельное Большое Спасибо!
Сделаем, но уже завтра.... Вот я тоже подумал, что где-то перемудрил с логикой. Учусь только, некоторых тонкостей просто не понимаю....

Добавлено через 2 часа 22 минуты
Если я верно понял, нужно сделать так:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private void EmployGPS () {
            // проверим, если юзер включил в настройках GPS и чёкнул checkBox для определения координат, то....
            if (locationManager.isProviderEnabled(GPS_PROVIDER) && checkBox4.isChecked()) {
               // тут узнаём есть ли разрешение. И если разрешения на определение положения нету, то....
               final int PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION = 1;
               if (ContextCompat.checkSelfPermission(SettingActivity.this, ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                   // выводим окошко с просьбой дать нам разрешение на определение местоположения
                   ActivityCompat.requestPermissions(SettingActivity.this, new String[]{ACCESS_FINE_LOCATION}, PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION);
               } else {
                   //иначе (если есть разрешение) выводим Toast и ловим координаты места
                   Toast.makeText(SettingActivity.this, "Ждите! GPS уже ищет Ваше местоположение!", Toast.LENGTH_LONG).show();
                   locationManager.requestLocationUpdates(GPS_PROVIDER, 3000, 100, locationListener);
                }
              }
            } // конец метода EmployGPS
PS. Ну и ещё спрошу: Вот такое в манифест не нужно добавить ?

XML
1
<uses-feature android:name="android.hardware.location.gps" />
0
111 / 89 / 29
Регистрация: 07.01.2017
Сообщений: 456
01.03.2019, 07:15
Abakus, почти. Нужно еще добавить обработку принятия / отказа разрешения. Делается это в методе onRequestPermissionsResult(), если разрешение дано, можешь вызывать Toast и прочее (чтобы пользователь не нажимал на кнопку повторно). Так же с CheckBox проработай вариант, когда разрешения нет (зачем его держать прожатым, если это указывает на то, что доступ к гео есть, хотя разрешения нет).
0
 Аватар для Abakus
4 / 3 / 1
Регистрация: 17.02.2018
Сообщений: 119
01.03.2019, 12:42  [ТС]
jaman_smk, то есть что то типа этого ?

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@Override
public void onRequestPermissionsResult(int requestCode,
        String permissions[], int[] grantResults) {
    if (requestCode==PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION) {
            // в разрешении отказано, результирующие массивы пусты
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                // разрешение дано. работаем с координатами
                Toast.makeText(SettingActivity.this, "Ждите, щас придут координаты", Toast.LENGTH_LONG).show();
                locationManager.requestLocationUpdates(GPS_PROVIDER, 3000, 100, locationListener);
            } else {
                // в разрешении отказано. отчёкнем чекбокс и будем плакать
                 checkBox4.setChecked(false);
                 Toast.makeText(SettingActivity.this, "Жаль, тогда сам вводи координаты. Врукопашную.", Toast.LENGTH_LONG).show();
            }
            return;
    }
}
только я, честно сказать вообще не понял куда это воткнуть ? и как связать с моим методом EmployGPS () . чего-то где-то я не понимаю увы.
0
111 / 89 / 29
Регистрация: 07.01.2017
Сообщений: 456
01.03.2019, 12:56
Abakus, если разрешения нет - запроси его. В onRequestPermissionsResult() придет ответ на действие пользователя в диалоге запроса разрешения, там и обрабатывай. Примеров полно, есть тут: https://github.com/googlesampl... ivity.java
0
 Аватар для Abakus
4 / 3 / 1
Регистрация: 17.02.2018
Сообщений: 119
01.03.2019, 14:34  [ТС]
вот чего натворил. Прямо со студии скопировал. jaman_smk, зацените пожалуйста (волшебное слово) опытным глазом. Если не трудно конечно ....

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
private void EmployGPS () {
        // проверим, если юзер включил в настройках GPS и чёкнул checkBox для определения координат, то....
        if (locationManager.isProviderEnabled(GPS_PROVIDER) && checkBox4.isChecked()) {
            // тут узнаём есть ли разрешение. И если разрешения на определение положения нету, то....
            final int PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION = 1;
            if (ContextCompat.checkSelfPermission(SettingActivity.this, ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                // выводим окошко с просьбой дать нам разрешение на определение местоположения
                ActivityCompat.requestPermissions(SettingActivity.this, new String[]{ACCESS_FINE_LOCATION}, PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION);
            } else {
                //иначе (если есть разрешение) выводим Toast и ловим координаты места
                Toast.makeText(SettingActivity.this, "Ждите, ЖПС уже ищет Вас!", Toast.LENGTH_LONG).show();
                locationManager.requestLocationUpdates(GPS_PROVIDER, 3000, 100, locationListener);
            }
        }
    } // конец метода EmployGPS
 
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults){
        super.onRequestPermissionsResult(requestCode, permissions, grantResults); // надо вызвать суперметод 
        // чуток переопределяем. если код ответа и разрешение наши, но результат PERMISSION_DENIED
       // значит юзер (гад такой) отказал в разрешении
        if (requestCode == 1 && permissions[0].equals(ACCESS_FINE_LOCATION) && grantResults[0] == PackageManager.PERMISSION_DENIED) {
          // что-ж, отчёкнем чекбокс и поплачем в Toast (пусть сам ищет свои координаты)
            checkBox4.setChecked(false);
            Toast.makeText(SettingActivity.this, "Жаль, тогда сам вводи координаты. Врукопашную.", Toast.LENGTH_LONG).show();
        }
    }
надеюсь, правильно сделал ?....
0
111 / 89 / 29
Регистрация: 07.01.2017
Сообщений: 456
01.03.2019, 15:10
Abakus,

Java
1
2
3
4
5
6
7
if (requestCode == 1 && permissions[0].equals(ACCESS_FINE_LOCATION) && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    Toast.makeText(SettingActivity.this, "Ждите, ЖПС уже ищет Вас!", Toast.LENGTH_LONG).show();
                locationManager.requestLocationUpdates(GPS_PROVIDER, 3000, 100, locationListener);
                } else {
                    checkBox4.setChecked(false);
            Toast.makeText(SettingActivity.this, "Жаль, тогда сам вводи координаты. Врукопашную.", Toast.LENGTH_LONG).show();
                }
Так точнее будет. Пользователю не нужно будет повторно нажимать на запрос. Осталось коды все вынести в константы.

Добавлено через 12 минут
Abakus, + чуть изменил бы обработку отказа, например, отображал бы диалог и мониторил информацию о том, отказался ли пользователь от разрешения совсем (можно нажать при 2 и более запросе на кнопку, которая гарантирует, что пользователю не нужно твое разрешение, и что оно ему не покажется больше, тогда запрос ты не сделаешь). Для таких сиуаций можно восмользоваться методом shouldShowRequestPermissionRationale(), который может указать на тип отказа.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.03.2019, 15:10
Помогаю со студенческими работами здесь

Ошибка при создании приложения
Доброго всем дня! Столкнулся с не приятной проблемой, при создании проекта wpf. Вылетает все время ошибка и удается создать проект!(ошибку...

Помощь при создании ГУИ-приложения
Создаю GUI-приложение для работы с базой данных (по &quot;Создание Web-приложений с помощью C++Builder 5&quot;, автор: Наталия Елманова). 1....

Ошибка при создании приложения Composer
Yii2, Windows 7, Composer ставил из ехе-шника. Проблема на картинке.

Ошибка при создании веб-приложения
Добрый день! Столкнулся с непонятной проблемой - при создании веб-приложения в среде NetBeans и его запуске появляется сообщение в...

Ошибка при создании консольного приложения
при создании консольного проекта на C# в 10 студии когда создал и пытаюсь открыть файл с кодом происходит ошибка с таким текстом...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru