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

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

27.02.2019, 20:44. Показов 4319. Ответов 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
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru