Перейти к содержанию
  • 0
Евгений Корепов

Андроид, WebBrowser, Geolocation - запрос разрешения на геолокацию

Вопросы

Простое приложение для андроид - форма, на ней TWebBrowser. В WebBrowser открываем что то требующее разрешение на геолокацию. У примеру https://www.openstreetmap.org 

В обычном браузере, при тыке на "Показать мое местоположение" появится popup окно с запросом разрешения на "Доступ к данным о вашем местоположении".

Но в Delphi приложении описанном выше никакого запроса не приходит. ?

Нашел решение для java https://forums.fusetools.com/t/geolocation-not-enabled-in-webview-on-android/1374 

В функцию создания WebView 

    public static Object CreateWebView321(final boolean zoomEnabled,final boolean scrollEnabled)
    {
        ScrollableWebView wv = new ScrollableWebView(com.fuse.Activity.getRootActivity());
        wv.getSettings().setJavaScriptEnabled(true);
        wv.getSettings().setUseWideViewPort(true); //enabled viewport meta tag
        wv.getSettings().setLoadWithOverviewMode(true); //mimic iOS Safari and Android Chrome
        wv.getSettings().setSupportZoom(zoomEnabled);
        wv.getSettings().setBuiltInZoomControls(zoomEnabled);
        wv.getSettings().setDomStorageEnabled(true);
        wv.setAllowScroll(scrollEnabled);
        
        return wv;
    }

рекомендуется добавить следующий код

       wv.getSettings().setGeolocationEnabled(true);
       wv.setWebChromeClient(new WebChromeClient(){
            @Override public void onGeolocationPermissionsShowPrompt(String origin, Callback callback) {
                callback.invoke(origin, true, false);
            }
        });

В модуле FMX.WebBrowser.Android.pas это выглядит так

constructor TAndroidWebBrowserService.Create;
var
  LayoutParams: JRelativeLayout_LayoutParams;
begin
  FWebView := TJWebBrowser.JavaClass.init(TAndroidHelper.Activity);
  FWebView.getSettings.setJavaScriptEnabled(True);
  FListener := TWebBrowserListener.Create(Self);
  FWebView.SetWebViewListener(FListener);
  FFocusChangeListener := TFocusChangeListener.Create(Self);
  FWebView.setOnFocusChangeListener(FFocusChangeListener);
  FWebView.getSettings.setGeolocationEnabled(True);
  FWebView.getSettings.setAppCacheEnabled(True);
  FWebView.getSettings.setDatabaseEnabled(True);
  FWebView.getSettings.setDomStorageEnabled(True);
  FWebView.getSettings.setBuiltInZoomControls(True);
  FWebView.getSettings.setDisplayZoomControls(False);

  FWebViewContainer := TJRelativeLayout.JavaClass.init(TAndroidHelper.Context);
  FChildrenContainer := TJRelativeLayout.JavaClass.init(TAndroidHelper.Context);
  LayoutParams := TJRelativeLayout_LayoutParams.JavaClass.init(TJViewGroup_LayoutParams.JavaClass.MATCH_PARENT, TJViewGroup_LayoutParams.JavaClass.MATCH_PARENT);
  FWebViewContainer.addView(FWebView, LayoutParams);
  LayoutParams := TJRelativeLayout_LayoutParams.JavaClass.init(TJViewGroup_LayoutParams.JavaClass.MATCH_PARENT, TJViewGroup_LayoutParams.JavaClass.MATCH_PARENT);
  FWebViewContainer.addView(FChildrenContainer, LayoutParams);
 
  SetEnableCaching(True);
end;

Вот суть вопроса - добавить delphi код. Пробую что то вот такое, но закончить ума не хватает

constructor TAndroidWebBrowserService.Create;
var
  LayoutParams: JRelativeLayout_LayoutParams;
begin
  FWebView := TJWebBrowser.JavaClass.init(TAndroidHelper.Activity);
  FWebView.getSettings.setJavaScriptEnabled(True);
  FListener := TWebBrowserListener.Create(Self);
  FWebView.SetWebViewListener(FListener);
  FFocusChangeListener := TFocusChangeListener.Create(Self);
  FWebView.setOnFocusChangeListener(FFocusChangeListener);
  FWebView.getSettings.setGeolocationEnabled(True);

  FWebView.setWebChromeClient(
    TJWebChromeClient.Create.onGeolocationPermissionsShowPrompt(
        origin: JString; callback: JGeolocationPermissions_Callback);.....

  FWebView.getSettings.setAppCacheEnabled(True);
  FWebView.getSettings.setDatabaseEnabled(True);
  FWebView.getSettings.setDomStorageEnabled(True);
  FWebView.getSettings.setBuiltInZoomControls(True);
  FWebView.getSettings.setDisplayZoomControls(False);

  FWebViewContainer := TJRelativeLayout.JavaClass.init(TAndroidHelper.Context);
  FChildrenContainer := TJRelativeLayout.JavaClass.init(TAndroidHelper.Context);
  LayoutParams := TJRelativeLayout_LayoutParams.JavaClass.init(TJViewGroup_LayoutParams.JavaClass.MATCH_PARENT, TJViewGroup_LayoutParams.JavaClass.MATCH_PARENT);
  FWebViewContainer.addView(FWebView, LayoutParams);
  LayoutParams := TJRelativeLayout_LayoutParams.JavaClass.init(TJViewGroup_LayoutParams.JavaClass.MATCH_PARENT, TJViewGroup_LayoutParams.JavaClass.MATCH_PARENT);
  FWebViewContainer.addView(FChildrenContainer, LayoutParams);

  SetEnableCaching(True);
end;

 

Поделиться сообщением


Ссылка на сообщение

Рекомендуемые сообщения

  • 1

Расписывать в деталях прям не буду
https://gist.github.com/ashumkin/3e2e213d657162ae26d364a85c64b472

 

Отредактировал Alexey Shumkin
добавлена гиперссылка

Поделиться сообщением


Ссылка на сообщение
  • 0
8 минут назад, Alexey Shumkin сказал:

Расписывать в деталях прям не буду
https://gist.github.com/ashumkin/3e2e213d657162ae26d364a85c64b472

 

Алексей, блестяще!!! Спасибо!

Поделиться сообщением


Ссылка на сообщение
  • 0

Только с fmx.jar-rebuild.cmd явно что то не так. 

Смущает конструкция

PATH %JAVA_HOME%\bin\;%PATH% & javac com\embarcadero\firemonkey\webbrowser\*.java  -cp "%SDK%\android-sdk-windows\platforms\android-26\android.jar"

Она ожидаемо выдает в консоль кучу мусора и результат

javac: file not found: com\embarcadero\firemonkey\webbrowser\*.java
Usage: javac <options> <source files>
use -help for a list of possible options

C:\Users\ekore>rem copy "D:\Embarcadero\Studio\20.0\lib\android\debug\fmx.jar" "D:\Embarcadero\Studio\20.0\lib\android\debug\fmx.jar.bak"

C:\Users\ekore>jar -vuf "D:\Embarcadero\Studio\20.0\lib\android\debug\fmx.jar" com\embarcadero\firemonkey\webbrowser\OnWebViewListener.class com\embarcadero\firemonkey\webbrowser\WebBrowser.class com\embarcadero\firemonkey\webbrowser\WebBrowser$1.class com\embarcadero\firemonkey\webbrowser\WebClient.class
com\embarcadero\firemonkey\webbrowser\OnWebViewListener.class : no such file or directory
com\embarcadero\firemonkey\webbrowser\WebBrowser.class : no such file or directory
com\embarcadero\firemonkey\webbrowser\WebBrowser$1.class : no such file or directory
com\embarcadero\firemonkey\webbrowser\WebClient.class : no such file or directory

 

Поделиться сообщением


Ссылка на сообщение
  • 0

читал её текст?
а коли приводишь лог вызова, весь приводи

но подозреваю, что тебе надо задать set BDS=
в правильное значение (у меня 32-битная ОС, у тебя наверняка 64-битная, и путь к Делфи отличается от твоего)

Отредактировал Alexey Shumkin

Поделиться сообщением


Ссылка на сообщение
  • 0

Хм, и никакого fmx-dexed-.jar в либах у меня не наблюдается, есть fmx.dex.jar.

Странно что при куче ошибок что даже создалось в fmx.jar. Но проблему не решило.

image.thumb.png.6ba76e5eeeee112791ac868a46f118ce.png

 

Поделиться сообщением


Ссылка на сообщение
  • 0
9 минут назад, Alexey Shumkin сказал:

читал её текст?
а коли приводишь лог вызова, весь приводи

но подозреваю, что тебе надо задать set BDS=
в правильное значение (у меня 32-битная ОС, у тебя наверняка 64-битная, и путь к Делфи отличается от твоего)

Вот батник:

set JAVA_HOME=C:\Program Files\Java\jre1.8.0_121
set SDK=C:\Users\Public\Documents\Embarcadero\Studio\20.0\CatalogRepository\AndroidSDK-2525_20.0.33219.4899\platforms

if "x%BDS%" == "x" set BDS=D:\Embarcadero\Studio\20.0

cd %BDS%\source\rtl\androiddex\java\fmx\src

PATH %JAVA_HOME%\bin\;%PATH% & javac com\embarcadero\firemonkey\webbrowser\*.java  -cp "%SDK%\android-sdk-windows\platforms\android-26\android.jar"

rem copy "%BDS%\lib\android\debug\fmx.jar" "%BDS%\lib\android\debug\fmx.jar.bak"
jar -vuf "%BDS%\lib\android\debug\fmx.jar" com\embarcadero\firemonkey\webbrowser\OnWebViewListener.class com\embarcadero\firemonkey\webbrowser\WebBrowser.class com\embarcadero\firemonkey\webbrowser\WebBrowser$1.class com\embarcadero\firemonkey\webbrowser\WebClient.class

Вот результат его работы

D:\>D:\Embarcadero\fmx.jar-rebuild.cmd

D:\>set JAVA_HOME=C:\Program Files\Java\jre1.8.0_121

D:\>set SDK=C:\Users\Public\Documents\Embarcadero\Studio\20.0\CatalogRepository\AndroidSDK-2525_20.0.33219.4899\platforms

D:\>if "xD:\Embarcadero\Studio\20.0" == "x" set BDS=D:\Embarcadero\Studio\20.0

D:\>cd D:\Embarcadero\Studio\20.0\source\rtl\androiddex\java\fmx\src

D:\Embarcadero\Studio\20.0\source\rtl\androiddex\java\fmx\src>PATH C:\Program Files\Java\jre1.8.0_121\bin\;C:\Program Files\Java\jre1.8.0_121\bin\;C:\Program Files\Java\jre1.8.0_121\bin\;C:\Program Files\Java\jre1.8.0_121\bin\;d:\Embarcadero\Studio\20.0\bin;d:\Embarcadero\Studio\20.0\bin64;D:\Embarcadero\Studio\20.0\bin;C:\Users\Public\Document
s\Embarcadero\Studio\20.0\Bpl;D:\Embarcadero\Studio\20.0\bin64;C:\Users\Public\Documents\Embarcadero\Studio\20.0\Bpl\Win64;C:\Program Files\Microsoft MPI\Bin\;C:\ProgramData\Oracle\Java\javapath;D:\PlatformSDKs\Windows Kits\10\Windows Performance Toolkit\;C:\Program Files\Java\jdk1.7.0_71\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\W
bem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\OpenSSL-Win32\bin\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program Files\OpenVPN\bin;C:\WINDOWS\System32\OpenSSH\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\PHP\;C:\ProgramData\ComposerSetup\bin;C:\ProgramData\Compose
rSetup\bin;C:\Users\ekore\AppData\Local\Microsoft\WindowsApps;C:\Users\ekore\AppData\Local\GitHubDesktop\bin;C:\Users\ekore\AppData\Local\Microsoft\WindowsApps;C:\PHP\;C:\Users\ekore\AppData\Roaming\Composer\vendor\bin;C:\ProgramData\ComposerSetup\bin;      & javac com\embarcadero\firemonkey\webbrowser\*.java  -cp "C:\Users\Public\Documents\Emb
arcadero\Studio\20.0\CatalogRepository\AndroidSDK-2525_20.0.33219.4899\platforms\android-sdk-windows\platforms\android-26\android.jar"
com\embarcadero\firemonkey\webbrowser\OnWebViewListener.java:3: error: package android.graphics does not exist
import android.graphics.Bitmap;
                       ^
com\embarcadero\firemonkey\webbrowser\OnWebViewListener.java:4: error: package android.net.http does not exist
import android.net.http.SslError;
                       ^
com\embarcadero\firemonkey\webbrowser\OnWebViewListener.java:5: error: package android.os does not exist
import android.os.Message;
                 ^
com\embarcadero\firemonkey\webbrowser\OnWebViewListener.java:6: error: package android.view does not exist
import android.view.KeyEvent;
                   ^
com\embarcadero\firemonkey\webbrowser\OnWebViewListener.java:7: error: package android.webkit does not exist
import android.webkit.HttpAuthHandler;
                     ^
com\embarcadero\firemonkey\webbrowser\OnWebViewListener.java:8: error: package android.webkit does not exist
import android.webkit.SslErrorHandler;
                     ^
com\embarcadero\firemonkey\webbrowser\OnWebViewListener.java:9: error: package android.webkit does not exist
import android.webkit.WebView;
                     ^
com\embarcadero\firemonkey\webbrowser\OnWebViewListener.java:12: error: cannot find symbol
        public void doUpdateVisitedHistory(WebView view, String url,
                                           ^
  symbol:   class WebView
  location: interface OnWebViewListener
com\embarcadero\firemonkey\webbrowser\OnWebViewListener.java:15: error: cannot find symbol
        public void onFormResubmission(WebView view, Message dontResend,
                                       ^
  symbol:   class WebView
  location: interface OnWebViewListener
com\embarcadero\firemonkey\webbrowser\OnWebViewListener.java:15: error: cannot find symbol
        public void onFormResubmission(WebView view, Message dontResend,
                                                     ^
  symbol:   class Message
  location: interface OnWebViewListener
com\embarcadero\firemonkey\webbrowser\OnWebViewListener.java:16: error: cannot find symbol
                        Message resend);
                        ^
  symbol:   class Message
  location: interface OnWebViewListener
com\embarcadero\firemonkey\webbrowser\OnWebViewListener.java:18: error: cannot find symbol
        public void onLoadResource(WebView view, String url);
                                   ^
  symbol:   class WebView
  location: interface OnWebViewListener
com\embarcadero\firemonkey\webbrowser\OnWebViewListener.java:20: error: cannot find symbol
        public void onPageFinished(WebView view, String url);
                                   ^
  symbol:   class WebView
  location: interface OnWebViewListener
com\embarcadero\firemonkey\webbrowser\OnWebViewListener.java:22: error: cannot find symbol
        public void onPageStarted(WebView view, String url, Bitmap favicon);
                                  ^
  symbol:   class WebView
  location: interface OnWebViewListener
com\embarcadero\firemonkey\webbrowser\OnWebViewListener.java:22: error: cannot find symbol
        public void onPageStarted(WebView view, String url, Bitmap favicon);
                                                            ^
  symbol:   class Bitmap
  location: interface OnWebViewListener
com\embarcadero\firemonkey\webbrowser\OnWebViewListener.java:24: error: cannot find symbol
        public void onReceivedError(WebView view, int errorCode,
                                    ^
  symbol:   class WebView
  location: interface OnWebViewListener
com\embarcadero\firemonkey\webbrowser\OnWebViewListener.java:27: error: cannot find symbol
        public void onReceivedHttpAuthRequest(WebView view,
                                              ^
  symbol:   class WebView
  location: interface OnWebViewListener
com\embarcadero\firemonkey\webbrowser\OnWebViewListener.java:28: error: cannot find symbol
                        HttpAuthHandler handler, String host, String realm);
                        ^
  symbol:   class HttpAuthHandler
  location: interface OnWebViewListener
com\embarcadero\firemonkey\webbrowser\OnWebViewListener.java:30: error: cannot find symbol
        public void onReceivedSslError(WebView view, SslErrorHandler handler,
                                       ^
  symbol:   class WebView
  location: interface OnWebViewListener
com\embarcadero\firemonkey\webbrowser\OnWebViewListener.java:30: error: cannot find symbol
        public void onReceivedSslError(WebView view, SslErrorHandler handler,
                                                     ^
  symbol:   class SslErrorHandler
  location: interface OnWebViewListener
com\embarcadero\firemonkey\webbrowser\OnWebViewListener.java:31: error: cannot find symbol
                        SslError error);
                        ^
  symbol:   class SslError
  location: interface OnWebViewListener
com\embarcadero\firemonkey\webbrowser\OnWebViewListener.java:33: error: cannot find symbol
        public void onScaleChanged(WebView view, float oldScale, float newScale);
                                   ^
  symbol:   class WebView
  location: interface OnWebViewListener
com\embarcadero\firemonkey\webbrowser\OnWebViewListener.java:35: error: cannot find symbol
        public void onUnhandledKeyEvent(WebView view, KeyEvent event);
                                        ^
  symbol:   class WebView
  location: interface OnWebViewListener
com\embarcadero\firemonkey\webbrowser\OnWebViewListener.java:35: error: cannot find symbol
        public void onUnhandledKeyEvent(WebView view, KeyEvent event);
                                                      ^
  symbol:   class KeyEvent
  location: interface OnWebViewListener
com\embarcadero\firemonkey\webbrowser\OnWebViewListener.java:37: error: cannot find symbol
        public boolean shouldOverrideKeyEvent(WebView view, KeyEvent event);
                                              ^
  symbol:   class WebView
  location: interface OnWebViewListener
com\embarcadero\firemonkey\webbrowser\OnWebViewListener.java:37: error: cannot find symbol
        public boolean shouldOverrideKeyEvent(WebView view, KeyEvent event);
                                                            ^
  symbol:   class KeyEvent
  location: interface OnWebViewListener
com\embarcadero\firemonkey\webbrowser\OnWebViewListener.java:39: error: cannot find symbol
        public boolean shouldOverrideUrlLoading(WebView view, String url);
                                                ^
  symbol:   class WebView
  location: interface OnWebViewListener
com\embarcadero\firemonkey\webbrowser\WebBrowser.java:3: error: package android.content does not exist
import android.content.Context;
                      ^
com\embarcadero\firemonkey\webbrowser\WebBrowser.java:4: error: package android.webkit does not exist
import android.webkit.WebChromeClient;
                     ^
com\embarcadero\firemonkey\webbrowser\WebBrowser.java:5: error: package android.webkit does not exist
import android.webkit.WebView;
                     ^
com\embarcadero\firemonkey\webbrowser\WebBrowser.java:6: error: package android.webkit.GeolocationPermissions does not exist
import android.webkit.GeolocationPermissions.Callback;
                                            ^
com\embarcadero\firemonkey\webbrowser\WebBrowser.java:8: error: cannot find symbol
public class WebBrowser extends WebView {
                                ^
  symbol: class WebView
com\embarcadero\firemonkey\webbrowser\WebClient.java:3: error: package android.graphics does not exist
import android.graphics.Bitmap;
                       ^
com\embarcadero\firemonkey\webbrowser\WebClient.java:4: error: package android.net.http does not exist
import android.net.http.SslError;
                       ^
com\embarcadero\firemonkey\webbrowser\WebClient.java:5: error: package android.os does not exist
import android.os.Message;
                 ^
com\embarcadero\firemonkey\webbrowser\WebClient.java:6: error: package android.view does not exist
import android.view.KeyEvent;
                   ^
com\embarcadero\firemonkey\webbrowser\WebClient.java:7: error: package android.webkit does not exist
import android.webkit.HttpAuthHandler;
                     ^
com\embarcadero\firemonkey\webbrowser\WebClient.java:8: error: package android.webkit does not exist
import android.webkit.SslErrorHandler;
                     ^
com\embarcadero\firemonkey\webbrowser\WebClient.java:9: error: package android.webkit does not exist
import android.webkit.WebView;
                     ^
com\embarcadero\firemonkey\webbrowser\WebClient.java:10: error: package android.webkit does not exist
import android.webkit.WebViewClient;
                     ^
com\embarcadero\firemonkey\webbrowser\WebClient.java:12: error: cannot find symbol
public class WebClient extends WebViewClient {
                               ^
  symbol: class WebViewClient
com\embarcadero\firemonkey\webbrowser\WebBrowser.java:11: error: cannot find symbol
        private WebChromeClient mWebChromeClient;
                ^
  symbol:   class WebChromeClient
  location: class WebBrowser
com\embarcadero\firemonkey\webbrowser\WebBrowser.java:22: error: cannot find symbol
        public WebBrowser(Context context) {
                          ^
  symbol:   class Context
  location: class WebBrowser
com\embarcadero\firemonkey\webbrowser\WebClient.java:21: error: cannot find symbol
        public void doUpdateVisitedHistory(WebView view, String url,
                                           ^
  symbol:   class WebView
  location: class WebClient
com\embarcadero\firemonkey\webbrowser\WebClient.java:30: error: cannot find symbol
        public void onFormResubmission(WebView view, Message dontResend,
                                       ^
  symbol:   class WebView
  location: class WebClient
com\embarcadero\firemonkey\webbrowser\WebClient.java:30: error: cannot find symbol
        public void onFormResubmission(WebView view, Message dontResend,
                                                     ^
  symbol:   class Message
  location: class WebClient
com\embarcadero\firemonkey\webbrowser\WebClient.java:31: error: cannot find symbol
                        Message resend) {
                        ^
  symbol:   class Message
  location: class WebClient
com\embarcadero\firemonkey\webbrowser\WebClient.java:39: error: cannot find symbol
        public void onLoadResource(WebView view, String url) {
                                   ^
  symbol:   class WebView
  location: class WebClient
com\embarcadero\firemonkey\webbrowser\WebClient.java:47: error: cannot find symbol
        public void onPageFinished(WebView view, String url) {
                                   ^
  symbol:   class WebView
  location: class WebClient
com\embarcadero\firemonkey\webbrowser\WebClient.java:55: error: cannot find symbol
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
                                  ^
  symbol:   class WebView
  location: class WebClient
com\embarcadero\firemonkey\webbrowser\WebClient.java:55: error: cannot find symbol
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
                                                            ^
  symbol:   class Bitmap
  location: class WebClient
com\embarcadero\firemonkey\webbrowser\WebClient.java:63: error: cannot find symbol
        public void onReceivedError(WebView view, int errorCode,
                                    ^
  symbol:   class WebView
  location: class WebClient
com\embarcadero\firemonkey\webbrowser\WebClient.java:72: error: cannot find symbol
        public void onReceivedHttpAuthRequest(WebView view,
                                              ^
  symbol:   class WebView
  location: class WebClient
com\embarcadero\firemonkey\webbrowser\WebClient.java:73: error: cannot find symbol
                        HttpAuthHandler handler, String host, String realm) {
                        ^
  symbol:   class HttpAuthHandler
  location: class WebClient
com\embarcadero\firemonkey\webbrowser\WebClient.java:81: error: cannot find symbol
        public void onReceivedSslError(WebView view, SslErrorHandler handler,
                                       ^
  symbol:   class WebView
  location: class WebClient
com\embarcadero\firemonkey\webbrowser\WebClient.java:81: error: cannot find symbol
        public void onReceivedSslError(WebView view, SslErrorHandler handler,
                                                     ^
  symbol:   class SslErrorHandler
  location: class WebClient
com\embarcadero\firemonkey\webbrowser\WebClient.java:82: error: cannot find symbol
                        SslError error) {
                        ^
  symbol:   class SslError
  location: class WebClient
com\embarcadero\firemonkey\webbrowser\WebClient.java:90: error: cannot find symbol
        public void onScaleChanged(WebView view, float oldScale, float newScale) {
                                   ^
  symbol:   class WebView
  location: class WebClient
com\embarcadero\firemonkey\webbrowser\WebClient.java:98: error: cannot find symbol
        public void onUnhandledKeyEvent(WebView view, KeyEvent event) {
                                        ^
  symbol:   class WebView
  location: class WebClient
com\embarcadero\firemonkey\webbrowser\WebClient.java:98: error: cannot find symbol
        public void onUnhandledKeyEvent(WebView view, KeyEvent event) {
                                                      ^
  symbol:   class KeyEvent
  location: class WebClient
com\embarcadero\firemonkey\webbrowser\WebClient.java:106: error: cannot find symbol
        public boolean shouldOverrideKeyEvent(WebView view, KeyEvent event) {
                                              ^
  symbol:   class WebView
  location: class WebClient
com\embarcadero\firemonkey\webbrowser\WebClient.java:106: error: cannot find symbol
        public boolean shouldOverrideKeyEvent(WebView view, KeyEvent event) {
                                                            ^
  symbol:   class KeyEvent
  location: class WebClient
com\embarcadero\firemonkey\webbrowser\WebClient.java:114: error: cannot find symbol
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
                                                ^
  symbol:   class WebView
  location: class WebClient
com\embarcadero\firemonkey\webbrowser\WebBrowser.java:25: error: cannot find symbol
                this.setWebViewClient(mWebClient);
                    ^
  symbol: method setWebViewClient(WebClient)
com\embarcadero\firemonkey\webbrowser\WebBrowser.java:26: error: cannot find symbol
                mWebChromeClient = new WebChromeClient() {
                                       ^
  symbol:   class WebChromeClient
  location: class WebBrowser
com\embarcadero\firemonkey\webbrowser\WebBrowser.java:33: error: cannot find symbol
                this.setFocusable(true);
                    ^
  symbol: method setFocusable(boolean)
com\embarcadero\firemonkey\webbrowser\WebClient.java:23: error: cannot find symbol
                super.doUpdateVisitedHistory(view, url, isReload);
                ^
  symbol:   variable super
  location: class WebClient
com\embarcadero\firemonkey\webbrowser\WebClient.java:20: error: method does not override or implement a method from a supertype
        @Override
        ^
com\embarcadero\firemonkey\webbrowser\WebClient.java:32: error: cannot find symbol
                super.onFormResubmission(view, dontResend, resend);
                ^
  symbol:   variable super
  location: class WebClient
com\embarcadero\firemonkey\webbrowser\WebClient.java:29: error: method does not override or implement a method from a supertype
        @Override
        ^
com\embarcadero\firemonkey\webbrowser\WebClient.java:40: error: cannot find symbol
                super.onLoadResource(view, url);
                ^
  symbol:   variable super
  location: class WebClient
com\embarcadero\firemonkey\webbrowser\WebClient.java:38: error: method does not override or implement a method from a supertype
        @Override
        ^
com\embarcadero\firemonkey\webbrowser\WebClient.java:48: error: cannot find symbol
                super.onPageFinished(view, url);
                ^
  symbol:   variable super
  location: class WebClient
com\embarcadero\firemonkey\webbrowser\WebClient.java:46: error: method does not override or implement a method from a supertype
        @Override
        ^
com\embarcadero\firemonkey\webbrowser\WebClient.java:56: error: cannot find symbol
                super.onPageStarted(view, url, favicon);
                ^
  symbol:   variable super
  location: class WebClient
com\embarcadero\firemonkey\webbrowser\WebClient.java:54: error: method does not override or implement a method from a supertype
        @Override
        ^
com\embarcadero\firemonkey\webbrowser\WebClient.java:65: error: cannot find symbol
                super.onReceivedError(view, errorCode, description, failingUrl);
                ^
  symbol:   variable super
  location: class WebClient
com\embarcadero\firemonkey\webbrowser\WebClient.java:62: error: method does not override or implement a method from a supertype
        @Override
        ^
com\embarcadero\firemonkey\webbrowser\WebClient.java:74: error: cannot find symbol
                super.onReceivedHttpAuthRequest(view, handler, host, realm);
                ^
  symbol:   variable super
  location: class WebClient
com\embarcadero\firemonkey\webbrowser\WebClient.java:71: error: method does not override or implement a method from a supertype
        @Override
        ^
com\embarcadero\firemonkey\webbrowser\WebClient.java:83: error: cannot find symbol
                super.onReceivedSslError(view, handler, error);
                ^
  symbol:   variable super
  location: class WebClient
com\embarcadero\firemonkey\webbrowser\WebClient.java:80: error: method does not override or implement a method from a supertype
        @Override
        ^
com\embarcadero\firemonkey\webbrowser\WebClient.java:91: error: cannot find symbol
                super.onScaleChanged(view, oldScale, newScale);
                ^
  symbol:   variable super
  location: class WebClient
com\embarcadero\firemonkey\webbrowser\WebClient.java:89: error: method does not override or implement a method from a supertype
        @Override
        ^
com\embarcadero\firemonkey\webbrowser\WebClient.java:99: error: cannot find symbol
                super.onUnhandledKeyEvent(view, event);
                ^
  symbol:   variable super
  location: class WebClient
com\embarcadero\firemonkey\webbrowser\WebClient.java:97: error: method does not override or implement a method from a supertype
        @Override
        ^
com\embarcadero\firemonkey\webbrowser\WebClient.java:110: error: cannot find symbol
                return super.shouldOverrideKeyEvent(view, event);
                       ^
  symbol:   variable super
  location: class WebClient
com\embarcadero\firemonkey\webbrowser\WebClient.java:105: error: method does not override or implement a method from a supertype
        @Override
        ^
com\embarcadero\firemonkey\webbrowser\WebClient.java:113: error: method does not override or implement a method from a supertype
        @Override
        ^
89 errors

D:\Embarcadero\Studio\20.0\source\rtl\androiddex\java\fmx\src>rem copy "D:\Embarcadero\Studio\20.0\lib\android\debug\fmx.jar" "D:\Embarcadero\Studio\20.0\lib\android\debug\fmx.jar.bak"

D:\Embarcadero\Studio\20.0\source\rtl\androiddex\java\fmx\src>jar -vuf "D:\Embarcadero\Studio\20.0\lib\android\debug\fmx.jar" com\embarcadero\firemonkey\webbrowser\OnWebViewListener.class com\embarcadero\firemonkey\webbrowser\WebBrowser.class com\embarcadero\firemonkey\webbrowser\WebBrowser$1.class com\embarcadero\firemonkey\webbrowser\WebClien
t.class
com\embarcadero\firemonkey\webbrowser\OnWebViewListener.class : no such file or directory
com\embarcadero\firemonkey\webbrowser\WebBrowser.class : no such file or directory
com\embarcadero\firemonkey\webbrowser\WebBrowser$1.class : no such file or directory
com\embarcadero\firemonkey\webbrowser\WebClient.class : no such file or directory

 

Поделиться сообщением


Ссылка на сообщение
  • 0
Цитата

Хм, и никакого fmx-dexed-.jar в либах у меня не наблюдается, есть fmx.dex.jar.

ну тут опечатался

всё вам на блюдечке надо...
 

Цитата

set SDK=C:\Users\Public\Documents\Embarcadero\Studio\20.0\CatalogRepository\AndroidSDK-2525_20.0.33219.4899\platforms

...

.... -cp "%SDK%\android-sdk-windows\platforms\android-26\android.jar"

свяжи воедино

с ошибками вида
 

com\embarcadero\firemonkey\webbrowser\OnWebViewListener.java:3: error: package android.graphics does not exist

 

Поделиться сообщением


Ссылка на сообщение
  • 0
9 минут назад, Alexey Shumkin сказал:

ну тут опечатался

всё вам на блюдечке надо...
 

свяжи воедино

с ошибками вида
 


com\embarcadero\firemonkey\webbrowser\OnWebViewListener.java:3: error: package android.graphics does not exist

 

Где моё блюдечко!!! И чтоб с голубой каёмочкой!!! ? Просто никогда с этим не связывался, да и времени погружаться в нюансы просто нет ( 

Связал. Мой косяк. Дебильный путь от Эмбы сбил с толку. Вот первый раз решил SDK решил оставить по умолчанию (обычно он у меня в D:\PlatformSDKs) и теперь пожинаю плоды...

Теперь гораздо-гораздо лучше! Куча предупреждений, но кто их читает ? 

D:\Embarcadero\Studio\20.0\source\rtl\androiddex\java\fmx\src>D:\Embarcadero\fmx.jar-rebuild.cmd

D:\Embarcadero\Studio\20.0\source\rtl\androiddex\java\fmx\src>set JAVA_HOME=C:\Program Files\Java\jre1.8.0_121

D:\Embarcadero\Studio\20.0\source\rtl\androiddex\java\fmx\src>set SDK=C:\Users\Public\Documents\Embarcadero\Studio\20.0\CatalogRepository\AndroidSDK-2525_20.0.33219.4899\platforms

D:\Embarcadero\Studio\20.0\source\rtl\androiddex\java\fmx\src>if "xD:\Embarcadero\Studio\20.0" == "x" set BDS=D:\Embarcadero\Studio\20.0

D:\Embarcadero\Studio\20.0\source\rtl\androiddex\java\fmx\src>cd D:\Embarcadero\Studio\20.0\source\rtl\androiddex\java\fmx\src

D:\Embarcadero\Studio\20.0\source\rtl\androiddex\java\fmx\src>PATH C:\Program Files\Java\jre1.8.0_121\bin\;C:\Program Files\Java\jre1.8.0_121\bin\;C:\Program Files\Java\jre1.8.0_121\bin\;C:\Program Files\Java\jre1.8.0_121\bin\;C:\Program Files\Java\jre1.8.0_121\bin\;d:\Embarcadero\Studio\20.0\bin;d:\Embarcadero\Studio\20.0\bin64;D:\Embarcadero\
Studio\20.0\bin;C:\Users\Public\Documents\Embarcadero\Studio\20.0\Bpl;D:\Embarcadero\Studio\20.0\bin64;C:\Users\Public\Documents\Embarcadero\Studio\20.0\Bpl\Win64;C:\Program Files\Microsoft MPI\Bin\;C:\ProgramData\Oracle\Java\javapath;D:\PlatformSDKs\Windows Kits\10\Windows Performance Toolkit\;C:\Program Files\Java\jdk1.7.0_71\bin;C:\WINDOWS\s
ystem32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\OpenSSL-Win32\bin\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program Files\OpenVPN\bin;C:\WINDOWS\System32\OpenSSH\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\PHP\;C:\ProgramData\
ComposerSetup\bin;C:\ProgramData\ComposerSetup\bin;C:\Users\ekore\AppData\Local\Microsoft\WindowsApps;C:\Users\ekore\AppData\Local\GitHubDesktop\bin;C:\Users\ekore\AppData\Local\Microsoft\WindowsApps;C:\PHP\;C:\Users\ekore\AppData\Roaming\Composer\vendor\bin;C:\ProgramData\ComposerSetup\bin;       & javac com\embarcadero\firemonkey\webbrowser\*
.java  -cp "C:\Users\Public\Documents\Embarcadero\Studio\20.0\CatalogRepository\AndroidSDK-2525_20.0.33219.4899\platforms\android-26\android.jar"
warning: C:\Users\Public\Documents\Embarcadero\Studio\20.0\CatalogRepository\AndroidSDK-2525_20.0.33219.4899\platforms\android-26\android.jar(android/graphics/Bitmap.class): major version 52 is newer than 51, the highest major version supported by this compiler.
  It is recommended that the compiler be upgraded.
warning: C:\Users\Public\Documents\Embarcadero\Studio\20.0\CatalogRepository\AndroidSDK-2525_20.0.33219.4899\platforms\android-26\android.jar(android/net/http/SslError.class): major version 52 is newer than 51, the highest major version supported by this compiler.
  It is recommended that the compiler be upgraded.
warning: C:\Users\Public\Documents\Embarcadero\Studio\20.0\CatalogRepository\AndroidSDK-2525_20.0.33219.4899\platforms\android-26\android.jar(android/os/Message.class): major version 52 is newer than 51, the highest major version supported by this compiler.
  It is recommended that the compiler be upgraded.
warning: C:\Users\Public\Documents\Embarcadero\Studio\20.0\CatalogRepository\AndroidSDK-2525_20.0.33219.4899\platforms\android-26\android.jar(android/view/KeyEvent.class): major version 52 is newer than 51, the highest major version supported by this compiler.
  It is recommended that the compiler be upgraded.
warning: C:\Users\Public\Documents\Embarcadero\Studio\20.0\CatalogRepository\AndroidSDK-2525_20.0.33219.4899\platforms\android-26\android.jar(android/webkit/HttpAuthHandler.class): major version 52 is newer than 51, the highest major version supported by this compiler.
  It is recommended that the compiler be upgraded.
warning: C:\Users\Public\Documents\Embarcadero\Studio\20.0\CatalogRepository\AndroidSDK-2525_20.0.33219.4899\platforms\android-26\android.jar(android/webkit/SslErrorHandler.class): major version 52 is newer than 51, the highest major version supported by this compiler.
  It is recommended that the compiler be upgraded.
warning: C:\Users\Public\Documents\Embarcadero\Studio\20.0\CatalogRepository\AndroidSDK-2525_20.0.33219.4899\platforms\android-26\android.jar(android/webkit/WebView.class): major version 52 is newer than 51, the highest major version supported by this compiler.
  It is recommended that the compiler be upgraded.
warning: C:\Users\Public\Documents\Embarcadero\Studio\20.0\CatalogRepository\AndroidSDK-2525_20.0.33219.4899\platforms\android-26\android.jar(android/content/Context.class): major version 52 is newer than 51, the highest major version supported by this compiler.
  It is recommended that the compiler be upgraded.
warning: C:\Users\Public\Documents\Embarcadero\Studio\20.0\CatalogRepository\AndroidSDK-2525_20.0.33219.4899\platforms\android-26\android.jar(android/webkit/WebChromeClient.class): major version 52 is newer than 51, the highest major version supported by this compiler.
  It is recommended that the compiler be upgraded.
warning: C:\Users\Public\Documents\Embarcadero\Studio\20.0\CatalogRepository\AndroidSDK-2525_20.0.33219.4899\platforms\android-26\android.jar(android/webkit/GeolocationPermissions.class): major version 52 is newer than 51, the highest major version supported by this compiler.
  It is recommended that the compiler be upgraded.
warning: C:\Users\Public\Documents\Embarcadero\Studio\20.0\CatalogRepository\AndroidSDK-2525_20.0.33219.4899\platforms\android-26\android.jar(android/webkit/GeolocationPermissions$Callback.class): major version 52 is newer than 51, the highest major version supported by this compiler.
  It is recommended that the compiler be upgraded.
warning: C:\Users\Public\Documents\Embarcadero\Studio\20.0\CatalogRepository\AndroidSDK-2525_20.0.33219.4899\platforms\android-26\android.jar(android/view/ViewTreeObserver.class): major version 52 is newer than 51, the highest major version supported by this compiler.
  It is recommended that the compiler be upgraded.
warning: C:\Users\Public\Documents\Embarcadero\Studio\20.0\CatalogRepository\AndroidSDK-2525_20.0.33219.4899\platforms\android-26\android.jar(android/view/ViewTreeObserver$OnGlobalFocusChangeListener.class): major version 52 is newer than 51, the highest major version supported by this compiler.
  It is recommended that the compiler be upgraded.
warning: C:\Users\Public\Documents\Embarcadero\Studio\20.0\CatalogRepository\AndroidSDK-2525_20.0.33219.4899\platforms\android-26\android.jar(android/view/ViewGroup.class): major version 52 is newer than 51, the highest major version supported by this compiler.
  It is recommended that the compiler be upgraded.
warning: C:\Users\Public\Documents\Embarcadero\Studio\20.0\CatalogRepository\AndroidSDK-2525_20.0.33219.4899\platforms\android-26\android.jar(android/view/ViewGroup$OnHierarchyChangeListener.class): major version 52 is newer than 51, the highest major version supported by this compiler.
  It is recommended that the compiler be upgraded.
warning: C:\Users\Public\Documents\Embarcadero\Studio\20.0\CatalogRepository\AndroidSDK-2525_20.0.33219.4899\platforms\android-26\android.jar(android/view/ViewParent.class): major version 52 is newer than 51, the highest major version supported by this compiler.
  It is recommended that the compiler be upgraded.
warning: C:\Users\Public\Documents\Embarcadero\Studio\20.0\CatalogRepository\AndroidSDK-2525_20.0.33219.4899\platforms\android-26\android.jar(android/view/ViewManager.class): major version 52 is newer than 51, the highest major version supported by this compiler.
  It is recommended that the compiler be upgraded.
warning: C:\Users\Public\Documents\Embarcadero\Studio\20.0\CatalogRepository\AndroidSDK-2525_20.0.33219.4899\platforms\android-26\android.jar(android/view/View.class): major version 52 is newer than 51, the highest major version supported by this compiler.
  It is recommended that the compiler be upgraded.
warning: C:\Users\Public\Documents\Embarcadero\Studio\20.0\CatalogRepository\AndroidSDK-2525_20.0.33219.4899\platforms\android-26\android.jar(android/graphics/drawable/Drawable.class): major version 52 is newer than 51, the highest major version supported by this compiler.
  It is recommended that the compiler be upgraded.
warning: C:\Users\Public\Documents\Embarcadero\Studio\20.0\CatalogRepository\AndroidSDK-2525_20.0.33219.4899\platforms\android-26\android.jar(android/graphics/drawable/Drawable$Callback.class): major version 52 is newer than 51, the highest major version supported by this compiler.
  It is recommended that the compiler be upgraded.
warning: C:\Users\Public\Documents\Embarcadero\Studio\20.0\CatalogRepository\AndroidSDK-2525_20.0.33219.4899\platforms\android-26\android.jar(android/view/KeyEvent$Callback.class): major version 52 is newer than 51, the highest major version supported by this compiler.
  It is recommended that the compiler be upgraded.
warning: C:\Users\Public\Documents\Embarcadero\Studio\20.0\CatalogRepository\AndroidSDK-2525_20.0.33219.4899\platforms\android-26\android.jar(android/os/Parcelable.class): major version 52 is newer than 51, the highest major version supported by this compiler.
  It is recommended that the compiler be upgraded.
warning: C:\Users\Public\Documents\Embarcadero\Studio\20.0\CatalogRepository\AndroidSDK-2525_20.0.33219.4899\platforms\android-26\android.jar(android/view/InputEvent.class): major version 52 is newer than 51, the highest major version supported by this compiler.
  It is recommended that the compiler be upgraded.
warning: C:\Users\Public\Documents\Embarcadero\Studio\20.0\CatalogRepository\AndroidSDK-2525_20.0.33219.4899\platforms\android-26\android.jar(android/view/accessibility/AccessibilityEventSource.class): major version 52 is newer than 51, the highest major version supported by this compiler.
  It is recommended that the compiler be upgraded.
warning: C:\Users\Public\Documents\Embarcadero\Studio\20.0\CatalogRepository\AndroidSDK-2525_20.0.33219.4899\platforms\android-26\android.jar(android/widget/AbsoluteLayout.class): major version 52 is newer than 51, the highest major version supported by this compiler.
  It is recommended that the compiler be upgraded.
warning: C:\Users\Public\Documents\Embarcadero\Studio\20.0\CatalogRepository\AndroidSDK-2525_20.0.33219.4899\platforms\android-26\android.jar(android/webkit/WebViewClient.class): major version 52 is newer than 51, the highest major version supported by this compiler.
  It is recommended that the compiler be upgraded.
warning: C:\Users\Public\Documents\Embarcadero\Studio\20.0\CatalogRepository\AndroidSDK-2525_20.0.33219.4899\platforms\android-26\android.jar(android/view/ViewDebug.class): major version 52 is newer than 51, the highest major version supported by this compiler.
  It is recommended that the compiler be upgraded.
warning: C:\Users\Public\Documents\Embarcadero\Studio\20.0\CatalogRepository\AndroidSDK-2525_20.0.33219.4899\platforms\android-26\android.jar(android/view/ViewDebug$ExportedProperty.class): major version 52 is newer than 51, the highest major version supported by this compiler.
  It is recommended that the compiler be upgraded.
warning: C:\Users\Public\Documents\Embarcadero\Studio\20.0\CatalogRepository\AndroidSDK-2525_20.0.33219.4899\platforms\android-26\android.jar(android/view/ViewDebug$IntToString.class): major version 52 is newer than 51, the highest major version supported by this compiler.
  It is recommended that the compiler be upgraded.
warning: C:\Users\Public\Documents\Embarcadero\Studio\20.0\CatalogRepository\AndroidSDK-2525_20.0.33219.4899\platforms\android-26\android.jar(android/view/ViewDebug$FlagToString.class): major version 52 is newer than 51, the highest major version supported by this compiler.
  It is recommended that the compiler be upgraded.
warning: C:\Users\Public\Documents\Embarcadero\Studio\20.0\CatalogRepository\AndroidSDK-2525_20.0.33219.4899\platforms\android-26\android.jar(android/view/ViewGroupOverlay.class): major version 52 is newer than 51, the highest major version supported by this compiler.
  It is recommended that the compiler be upgraded.
warning: C:\Users\Public\Documents\Embarcadero\Studio\20.0\CatalogRepository\AndroidSDK-2525_20.0.33219.4899\platforms\android-26\android.jar(android/util/SparseArray.class): major version 52 is newer than 51, the highest major version supported by this compiler.
  It is recommended that the compiler be upgraded.
Note: com\embarcadero\firemonkey\webbrowser\WebClient.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
32 warnings

D:\Embarcadero\Studio\20.0\source\rtl\androiddex\java\fmx\src>rem copy "D:\Embarcadero\Studio\20.0\lib\android\debug\fmx.jar" "D:\Embarcadero\Studio\20.0\lib\android\debug\fmx.jar.bak"

D:\Embarcadero\Studio\20.0\source\rtl\androiddex\java\fmx\src>jar -vuf "D:\Embarcadero\Studio\20.0\lib\android\debug\fmx.jar" com\embarcadero\firemonkey\webbrowser\OnWebViewListener.class com\embarcadero\firemonkey\webbrowser\WebBrowser.class com\embarcadero\firemonkey\webbrowser\WebBrowser$1.class com\embarcadero\firemonkey\webbrowser\WebClien
t.class
adding: com/embarcadero/firemonkey/webbrowser/OnWebViewListener.class(in = 1183) (out= 482)(deflated 59%)
adding: com/embarcadero/firemonkey/webbrowser/WebBrowser.class(in = 1023) (out= 508)(deflated 50%)
adding: com/embarcadero/firemonkey/webbrowser/WebClient.class(in = 2881) (out= 1151)(deflated 60%)
adding: com/embarcadero/firemonkey/webbrowser/WebBrowser$1.class(in = 861) (out= 454)(deflated 47%)

И в конце приз - все заработало! Геолокация в браузере работает. Браузер даже не спросил разрешения на геолокацию - в приложении разрешения есть, и как я понимаю теперь браузер использует разрешения приложения. 

Поделиться сообщением


Ссылка на сообщение
  • 0

Алексей, позволь еще раз поблагодарить! И прошу прощения за то что я тупил и капризничал ? 

Поделиться сообщением


Ссылка на сообщение
  • 0
major version 52 is newer than 51, the highest major version supported by this compiler.
  It is recommended that the compiler be upgraded.

это, вроде, убирается  by
 

javac -source 1.7 -target 1.7 ...


похоже, либы в android.jar скомпилены Java 7,  а тут Java 8
 

Поделиться сообщением


Ссылка на сообщение
  • 0
27 минут назад, Alexey Shumkin сказал:

major version 52 is newer than 51, the highest major version supported by this compiler.
  It is recommended that the compiler be upgraded.

это, вроде, убирается  by
 


javac -source 1.7 -target 1.7 ...


похоже, либы в android.jar скомпилены Java 7,  а тут Java 8
 

Бедные программисты java, сколько странных и не очевидных нюансов ((( 

А для release достаточно поменять пути? Никаких дополнительных опций не нужно?

Поделиться сообщением


Ссылка на сообщение
  • 0
7 минут назад, Barbanel сказал:

Наглядный пример фразы "Вы прослушали разговор двух бушменских шаманов" )))))

ДА! В конце в концов! Выложите готовое решение! :))

Поделиться сообщением


Ссылка на сообщение
  • 0
19 минут назад, #WAMACO сказал:

ДА! В конце в концов! Выложите готовое решение! :))

Полностью готовое и верное решение тут https://gist.github.com/ashumkin/3e2e213d657162ae26d364a85c64b472 

Главное правильно в батнике выставить все пути. 

P.S. Давно бы уже эмба создала систему перекомпиляции прямо в среде, чтоб не мучаться с батниками в винде.

Поделиться сообщением


Ссылка на сообщение
  • 0

если программа работает с геолокацией, то просто при ее запуске сразу запросить доступ не получается? 

я по моему так и делал на андроиде в Андроид Студио, при показе активити с браузером где я точно знал будет использована геолокация, делал запрос на разрешение и все после этого работало. 

Отредактировал haword

Поделиться сообщением


Ссылка на сообщение
  • 0
Только что, haword сказал:

если программа работает с геолокацией, то просто при ее запуске сразу запросить доступ не получается? 

проблема и условия её возникновения описаны в первом сообщении ))
встроенный браузер не использует разрешения приложения

кстати, тут есть момент:
если мы, например, запретим приложению использовать геолокацию, а браузеру в данном исполнении, получается, безусловно разрешаем )) неувязочка... это надо проверить )))
вероятно, надо сложнее логику делать )

Поделиться сообщением


Ссылка на сообщение
  • 0
2 минуты назад, Alexey Shumkin сказал:

если мы, например, запретим приложению использовать геолокацию, а браузеру в данном исполнении, получается, безусловно разрешаем )) неувязочка... это надо проверить )))
вероятно, надо сложнее логику делать )

не проверял как это сделано в fmx, но в андроиде если ты даешь разрешение приложению на доступ к геолокации то браузер уже не спрашивает тебя об этом и ему это разрешено. 

Поделиться сообщением


Ссылка на сообщение
  • 0
2 минуты назад, haword сказал:

не проверял как это сделано в fmx, но в андроиде если ты даешь разрешение приложению на доступ к геолокации то браузер уже не спрашивает тебя об этом и ему это разрешено. 

в исходном сообщении - ссылка, про "андроид"...
так что не только fmx

Поделиться сообщением


Ссылка на сообщение
  • 0

могу выложить здесь свою apk, с программой, сырую и недоделанную, на java, еще не зарелизенную в плеэмаркете, в ней это работает. при показе активити идет запрос, на доступ к геолокации. если его разрешить, то при повторном открытии этой формы в браузере уже будет значок геолокации. в первый раз его нет потому что после запроса разрешения не пересоздается я так понимаю браузер и он не знает о том что есть права на геолокацию. но он понимает что приложению даны права. 

добавил.

app-release.7z

Отредактировал haword

Поделиться сообщением


Ссылка на сообщение
  • 0
17 минут назад, haword сказал:

могу выложить здесь свою apk, с программой, сырую и недоделанную, на java, еще не зарелизенную в плеэмаркете, в ней это работает. при показе активити идет запрос, на доступ к геолокации. если его разрешить, то при повторном открытии этой формы в браузере уже будет значок геолокации. в первый раз его нет потому что после запроса разрешения не пересоздается я так понимаю браузер и он не знает о том что есть права на геолокацию. но он понимает что приложению даны права. 

добавил.

app-release.7z

это здорово, что у тебя (тут на "ты" принято?) работает )
но я не адвокат FMX, и проблема - с FMX, один из способов решения - такой
хотя, в принципе, можно попробовать и по другому... но, собсна, это не моя проблема, мне просто было интересно её решить )

Поделиться сообщением


Ссылка на сообщение
  • 0
2 часа назад, Alexey Shumkin сказал:

проблема и условия её возникновения описаны в первом сообщении ))
встроенный браузер не использует разрешения приложения

кстати, тут есть момент:
если мы, например, запретим приложению использовать геолокацию, а браузеру в данном исполнении, получается, безусловно разрешаем )) неувязочка... это надо проверить )))
вероятно, надо сложнее логику делать )

Я проверил. После патча все работает как задумано, браузер наследует разрешения приложения:

  • Если приложению правильно даны разрешения на геолокацию, то браузер разрешения не спрашивает, геолокация нормально работает в браузере.
  • Если пользователь не дал приложению разрешение на геолокацию, то в браузере она тоже работать не будет, причем браузер и не будет сообщать о том что нет разрешения - при тыке на кнопку мое положение ничего не происходит. Это вполне нормально - пользователь сознательно отказался и понимает что геолокация работать не будет.

Приложение, если пользователь не дал разрешение, и не должно по идее открывать браузер, если геолокация важная составляющая сервиса. У меня к примеру выдается сообщение - мол вы не дали разрешение, приложение работать не может. И по идее нужно предлагать пользователю открыть настройки для того чтоб он дал разрешение. Кстати в каком то приложении видел что по кнопке открываются настройки приложений - удобно, но как интересно это сделать?

 

Отредактировал Евгений Корепов

Поделиться сообщением


Ссылка на сообщение
  • 0

Вот вам apk приложения для того чтоб потестить самостоятельно. 

UhtaBus.7z

Поделиться сообщением


Ссылка на сообщение
  • 0
2 часа назад, Евгений Корепов сказал:

Кстати в каком то приложении видел что по кнопке открываются настройки приложений - удобно, но как интересно это сделать?

Использовать LocationSettingsReqest, транслировав его. Но или устаревшее SettingsApi.

К сожалению нет возможности самому посмотреть и воспроизвести это все, временно нет подходящего аппарата

Поделиться сообщением


Ссылка на сообщение

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


  • Похожий контент

    • От ComAlex
      Господа Delphi-программисты под Android (FireMonkey),
      Нужна ваша помощь или совет в направления решения в несложной, достаточно типичной и прозрачной задаче:
      Я хочу выполнять некоторые вычисления (или выдавать Toastы) через каждые 30 сек. в Android-приложении.
      Что-то типа сервиса (службы): Приложение запускает задание и может закрываться, 
      но периодические вычисления продолжаются (результат сохраняется, допустим, в ini - не важно пока), т.е. служба работает.
      Я не знаю, как это решить:
      1. Организовал как сервис.
          Сервисы убиваются androidом ... И это политика androidов: экономить батарию и т.д.
      2. Сделал через AlarmManager.
          Тоже это не работает на MI 9T (Android 10: API 29). На старых (Android 4...: API 19) всё работает.
      3. Хотел использовать job scheduler: добавлять задания и удалять исполненные. Но не знаю как. ничего не нагуглил под Firemonkey. Может кто знает?
      Какие ещё варианты и вообще, это решается на Firemonkey Delphi XE 10.3.3?
      На поиск решения мною потрачено много время - сдвинуться не могу.
      Если Delphi это не умеет, так и скажите - перепрыгну на другую платформу.
          Может Delphi об этом думает, чтоб это скоро реализовать? В интернете тишина.
      Если Delphi это умеет, просьба дать идею или совет или пример ...
    • От Игорь Маринин
      поделитесь пожалуйста пустым проектом, готовым к публикации для TV устройств.
      что-то никак не получается опубликовать, сейчас отклонили с такими ошибками:
      APK:8
      No Now Playing notification [card]"
      Your App does not contain a “Now Playing” notification [card] for when the user has selected the HOME button within the app. Please refer to our Displaying a Now Playing Card documentation for more details.
      APK:8
      Play/Pause key event is not respected during playback
      Your media apps that play video or music content must respect the play/pause key during playback. Please refer to our Media Play/Pause documentation and Update the Playback State documentation for details.
      Missing DPad functionality
      Your app requires user interaction for menus or app navigation. Please make sure that all menus and app navigation are fully functional using a DPad. Please refer to our DPAD Control and Hardware Declaration documentation.
      ну и баннер не прилепил
      No full-size app banner
      Your app does not contain a full-size app banner or is it not visible in the launcher. We are targeting 1080P, which we consider xhdpi. Apps should include the banner in the xhdpi (320 dpi) drawables folder with a size of (320px × 180px). Please refer to our Home Screen Banner and UI Patterns documentation.
      The title should help users identify apps in the launcher. Please refer to our Visual Design and User Interaction documentation for more information.
      был бы очень благодарен за рабочий пустой костяк с манифестом.
       
    • От krapotkin
      В процессе разработки столкнулся с очень странной ситуацией, корни которой до сих пор неясны, но решение нашлось.
      Итак. Делфи 10.3.3. Чистое приложение - пустая форма и кнопка. Отлично работает на разных устройствах кроме Samsung Galaxy Tab A (2016). Android 5.1.1
      Программа падает, не успев даже загрузиться. Любая. При этом она же, скомпилированная на другом компе, запускается нормально. И даже после изменения SDK/NDK на нем, ничего не падает.
      LogCat дает крайне странную картину
      java.lang.IllegalArgumentException: Unable to load native library: /data/app-lib/com.embarcadero.Project1-1/libProject1.so
      Начинаем экспериментировать с SDK, NDK и т.д. Поставил также хотфиксы для 10.3.3.
      Сразу скажу, SDK/NDK ставились отдельно через Android studio, не скачивались вместе с Delphi. Не торопитесь бросать чтение на этом месте!)) На другом компе, где все работает, все ставилось точно так же.
      Короче, очень много комбинаций версий SDK/NDK проверено.
      Результат такой. При постепенном понижении версии NDK все взлетело при NDK v22.

      При этом версия SDK видимо такого большого влияния не имеет, потому что этот вариант нормально работает

      Повторюсь. На других устройствах все работало и на более новых Ndk. Xiaomi Mi Pad4 , Samsung Galaxy Tab A (2019), Xiaomi Redmi 5 и 5Plus
       
      Спасибо за участие и помощь в разборе завалов @Andrey Efimov
       
    • От krapotkin
      У меня в работе два приложения, и оба они не предназначены для Play market, так как имеют ограниченный круг использования, по сути, чисто внутрикорпоративные. Так что нежелательно и выкладывание их и на альтернативные магазины приложений. 
      Автоматически возникает вопрос обновления. Если в  первый раз мы можем установить приложение сами при помощи админов, то обновлять их не так просто. А контингент пользователей не справится с "скачайте APK по ссылке, найдите, куда его скачал браузер, и запустите вручную именно последний скачанный, а не какой попало"...
      Простейший способ - дать приложению скачать свежую копию с сайта и натравить на полученный файл системный инсталлер.
      Вот только свежие Andoird делать это напрямик запрещают. Нужен filepropvider. Целый день шуровал по мануалам и YT,
      Вот то что получилось  в результате.
      Если у вас 10.3.3 как у меня, уже можно не вносить <provider>...</provider> в манифест и свой файл file_paths.xml (или как вам его советуют назвать в интернетах) в деплой.
      Теперь все это делается хоть несколько странно и однобоко, но автоматически, путем установки галочки Secure File Sharing

      после этого в манифесте автоматически пропишется один из вариантов размещения файлов, которые вы можете найти в интернете. Используется алиас external-path
      файл, показанный на рисунке, создается автоматически самой делфи.

      теперь остается отгадать, какой путь реально подставится вместо "."
      Как показала практика, все пути выглядят не так, как кажется, если исходить из простого здравого смысла. Целый день использования GetHomeDir и других полезных методов TPath завел меня совсем в тупик.
      Оказалось все проще (?)
      st:TMemoryStream; OutputDir: JFile; ApkFile: JFile; ApkUri: Jnet_Uri; path, filename: string; ... OutputDir := TAndroidHelper.Context.getExternalCacheDir(); path := JStringToString(OutputDir.getAbsolutePath); filename := path+'/ASDroid2.apk'; ApkFile := TJfile.JavaClass.init( StringToJstring(filename)); FApkUri := TAndroidHelper.JFileToJURI(ApkFile); st.Position := 0; st.SaveToFile(filename); обратите внимание, в provider_paths мы задаем external-paths, а в коде ищем ExternalCacheDir.!!!  (For.Unbelievably.Creative.Knowers!)
      Потом все просто. FApkUri передаем в интент и запускаем 
      итоговый код примерно таков. (скачивание в потоке с использованием небольшого собственного API, но там ничего важного, можно не обращать внимания)
      procedure TasdSettingsFrame.bDownloadClick(Sender: TObject); begin {$IFDEF ANDROID} bDownload.Enabled := False; DownloadAndRun(); {$ENDIF} end; {$IFDEF ANDROID} procedure TasdSettingsFrame.DownloadAndRun(); begin ttask.Run(procedure var aapi:TasdAPI; st:TMemoryStream; OutputDir: JFile; ApkFile: JFile; ApkUri: Jnet_Uri; path, filename: string; begin st := TMemoryStream.Create; aapi := TasdAPI.Clone(_API); try aapi.OnReceiveData := OnReceiveData; aapi.getApk(st); if aapi.Err.Code=0 then begin OutputDir := TAndroidHelper.Context.getExternalCacheDir(); path := JStringToString(OutputDir.getAbsolutePath); filename := path+'/ASDroid2.apk'; ApkFile := TJfile.JavaClass.init( StringToJstring(filename)); FApkUri := TAndroidHelper.JFileToJURI(ApkFile); st.Position := 0; st.SaveToFile(filename); TThread.Synchronize(nil,procedure begin bDownload.Enabled := true; StartActivity(FApkUri); end); end; finally st.Free; aapi.Free; end; end); end; procedure StartActivity(ApkUri: Jnet_Uri); var Intent: JIntent; begin Intent := TJIntent.Create(); Intent.setAction(TJIntent.JavaClass.ACTION_VIEW); Intent.addFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK or TJIntent.JavaClass.FLAG_ACTIVITY_CLEAR_TOP or TJIntent.JavaClass.FLAG_GRANT_WRITE_URI_PERMISSION or TJIntent.JavaClass.FLAG_GRANT_READ_URI_PERMISSION); Intent.setDataAndType(apkuri, StringToJString('application/vnd.android.package-archive')); TAndroidHelper.Activity.startActivity(Intent); end; procedure TasdSettingsFrame.OnReceiveData(const Sender: TObject; AContentLength: Int64; AReadCount: Int64; var Abort: Boolean); begin tthread.Synchronize(nil, procedure begin pb1.Max := AContentLength; pb1.Value := AReadCount; end); end; {$ENDIF} Вопросы остались конечно, почему так странно с каталогами, но выяснять пока нет желания. Работает - не трожь.
      Всем удачи.
      UPD.
      Для того, чтобы системный инсталлер запускался, нужно не забыть отметить еще одну галочку

       
       
       
       
       
    • От Дмитрий Потапов
      Приветствую. На просторах интернета нашел BASS-библиотеку для Android и соответственно обертку для нее под Delphi.

      Вроде бы все работает нормально, но вот при настройке библиотеки при помощи методов
      BASS_GetConfigPtr, BASS_SetConfigPtr для работы со строковыми параметрами возникает проблема.
      На Windows с этим я легко работал, там достаточно использовать такую конструкцию

       
      PAnsiChar(BASS_GetConfigPtr(configId)) и получаем значение. BASS_SetConfigPtr(configId, PAnsiChar(value)) и задаем значение. Но вот под Android такой способ не проходит, как минимум по одной причине - он не понимает, что такое PAnsiChar. На docwiki.emarcadero.com, есть вот такая статейка. В которой написано, что PAnsiChar нужно заменить одним из трех: System.String, System.MarshalledString или System.SysUtils.TStringBuiler
      Только вот, если использовать MarshalledString, то при попытке получить значение приложение просто намертво зависает и все.
      Потом я подумал, так как библиотека написана на Java (вероятно), то может стоит попробовать использовать JNI в работе с ней, так как в Java файле, который прилагался вместе с библиотекой. Там я нашел объявления этих функций и заметил, что тип возвращаемого значения Object (ну, не зная Java я просто предположил, что это тоже просто ссылка на значение, например как PAnsiChar в Delphi на Windows).

      Но, при попытке как-либо использовать это натыкаюсь на проблемы в виде ошибки компиляции, либо очередном зависании приложения.
      Так как возвращается Object, то решил попробовать вариант с JObject и JString, но ни один вариант не хочет работать, опять ошибки на стадии компиляции, либо зависание приложение. Может быть, я что-то не так делаю.

      В общем, буду признателен за помощь!
    • От Yarpda
      Доброго времени!
      Есть идея сделать возможность резервирования данных приложения на Google drive под текущим аккаунтом пользователя. Ничего подобного я на форуме не нашел, может быть кто-то уже пытался решать подобную задачу? Интересует работа с Gdrive  в первую очередь.
    • От Ali Ezzeddine
      65/5000       Уважаемые,
      Есть ли способ вызвать сервис Java из приложения Delphi FMX?
    • От Эрик Шакиров
      Привет всем! Кто нибудь может подсказать как реализовать анимацию переходов между формами в Android без использования TabControl? Или подсказать в какую сторону "рыть"
    • От Светлана
      Ну всё в принципе как всегда, либо я барашка, либо лыжи не едут)
      А всё просто - я хочу, чтобы пока данные с сервера загружались по клику кнопки, пользователю элементарно был отклик в виде крутящейся какой нибудь фигни и он видел, что процесс идёт и что прога не зависла и никуда лишний раз не тыкал.
      Пока что для тестов сделала элементарно кнопку Update (speedbutton с image), данные элементарно грузятся и отображаются в GridPanel, а поверх него, чтоб пользователь и не смог куда либо тыкнуть, замостила панелькой с Image, вращаемой по таймеру (всё это дело наверху Visible:=false). И когда клацаем по кнопке Update, то панельку сверху грида делаю отображаемой и запускаю таймер, потом этот же обработчик/процедура грузит данные, а по окончанию останавливаем таймер и скрываем полупрозрачну, еще кстати, панельку. Аля вот так:
      procedure TForm1.SB_DataUpdateClick(Sender: TObject); begin //отображаем лого загрузки P_showLoad.Visible := true; Timer_load_rotate.Enabled := true; //с запуском таймера GetDeD_List(DE_set.Date); //процедура загрузки и отображения чего нам надо, которая весьма долго выполняется //и скрывае лого загрузки Timer_load_rotate.Enabled := false; //уже в обратном порядке P_showLoad.Visible := false; end; иии... ни черта не происходит как я хочу(
      Это лого вообще в итоге не отображается, а если убрать его скрытие, то оно у нас отобразится уже только тогда, когда всё загрузится. Логика мне стала подсказывать, что следовало его как то отобразить выполнив в параллельном асинхронном потоке аля так:
      procedure TForm1.SB_DataUpdateClick(Sender: TObject); begin TThread.Queue(TThread.Current, //TThread.Queue TThread.Synchronize ForceQueue procedure() begin P_showLoad.Visible := true; Timer_load_rotate.Enabled := true; end); GetDeD_List(DE_set.Date); //процедура загрузки и отображения чего нам надо, которая весьма долго выполняется end; И опять оно отображается только после того, как всё загрузится и проработает вся процедура. И уже чего только не пробовала и Synchronize и ForceQueue; и через TTask.Run и |task := TTask.Create(procedure () ... и т.д.| ничего не подходит, вот хоть убейся это всё дело будет отображаться только после полной отработки процедуры клика. Может я не в том направлении вообще рою и это как то по другому делается? Может я еще пока отлаживаю на Win32, а не всё на android, а там вот пара вариантов и норм на нём работают? Но чтот я никак не могу понять, что к чему... должно же быть как то просто, а я чтот никак не могу понять как(
    • От ComAlex
      Goоgle Play перестает поддерживать 32-bit Android-приложения c 01.08.2019.
      А выкладывать в Goоgle Play новые УЖЕ нельзя.
      Последние же Delphi XE не позволяют создать 64-bit Android-приложения.
      Кто знает, когда появится новая версия с поддержкой 64 - bit? Говорили, что в конце лета, но лето кончилось
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...