অ্যান্ড্রয়েড ওয়েবভিউ জিওলোকেশন


104

আমাকে একজনের ব্যবহারকারীর অবস্থান পুনরুদ্ধার করতে হবে WebView। আমি নিম্নলিখিত জাভাস্ক্রিপ্ট দিয়ে এটি না:

function getLocation() {
   navigator.geolocation.getCurrentPosition(displayLocation, handleError);
}

কিন্তু অনুমতি অনুরোধ পপআপ কখনও খোলে না।

আমি এই সেটিংস সেট করেছি:

ws.setJavaScriptEnabled(true);
ws.setGeolocationEnabled(true);
ws.setJavaScriptCanOpenWindowsAutomatically(true);

এর মধ্যে থেকে কোনও ব্যবহারকারীর অবস্থান অ্যাক্সেস করার সঠিক উপায় কী WebView?

উত্তর:


222
  • জাভাস্ক্রিপ্ট অবশ্যই WebViewব্যবহার করে সক্ষম করতে হবেWebSettings.setJavaScriptEnabled(true);
  • অ্যাপ্লিকেশনটির অনুমতি প্রয়োজন ACCESS_FINE_LOCATION
  • WebViewএকটি কাস্টম ব্যবহার করা আবশ্যক WebChromeClient, যা কার্যকরী WebChromeClient.onGeolocationPermissionsShowPrompt()। এই পদ্ধতিটি WebViewজাভাস্ক্রিপ্টে ব্যবহারকারীর অবস্থান প্রকাশের অনুমতি পাওয়ার জন্য ডেকে আনা হয় । (ব্রাউজারের ক্ষেত্রে, আমরা ব্যবহারকারীর কাছে একটি প্রম্পট দেখায়।) ডিফল্ট বাস্তবায়ন কিছুই করে না, তাই অনুমতি কখনও প্রাপ্ত হয় না এবং অবস্থানটি কখনই জাভাস্ক্রিপ্টে পাস করা হয় না। একটি সাধারণ বাস্তবায়ন যা সর্বদা অনুমতি দেয় ...

    webView.setWebChromeClient(new WebChromeClient() {
     public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) {
        callback.invoke(origin, true, false);
     }
    });
    

ভূ-অবস্থানটি অধিবেশনগুলির মধ্যে ক্যাশেড অবস্থান এবং অনুমতিগুলি ধরে রাখতে ডেটাবেস ব্যবহার করে। ব্যবহার করে ডাটাবেসের অবস্থান সেট করা আছে WebSettings.setGeolocationDatabasePath(...)। যদি ডাটাবেসের অবস্থানটি সেট না করা থাকে তবে অবিচ্ছিন্ন স্টোরেজ পাওয়া যাবে না, তবে জিওলোকেশন অন্যথায় সঠিকভাবে কাজ করতে থাকবে। ডাটাবেসের অবস্থান নির্ধারণ করতে, ব্যবহার করুন ...

webView.getSettings().setGeolocationDatabasePath( context.getFilesDir().getPath() );

6
এই উত্তরটি সঠিক, তবে আপনাকে অবশ্যই android.webkit.GoolocationPermission.Callback
নালপয়েন্টার এক্সসেপশন

4
এখানে একটি সম্পূর্ণ কোড উদাহরণ টার্বোম্যানেজ.ওয়ার্ডপ্রেস.কম
২০১২/০৪/২৩/২০১

4
"প্রসঙ্গ" সংজ্ঞায়িত হয় কোথায়?
সি গ্রাফিকস

5
আমি ন্যায়বিচারের android.webkit.WebChromeClient()পরিবর্তে সম্পূর্ণ যোগ্যতা অর্জন করতে WebChromeClient()এবং android.webkit.GeolocationPermissions.Callbackএই কাজটি করার জন্য শেষ করেছি ended
ফ্যাট সন্ন্যাস

4
এটি লক্ষ্য / রানটাইম> অ্যান্ড্রয়েড .0.০, রানটাইম অনুমতিগুলির কারণ নিয়ে ঠিক কাজ করে না?
31 白

19

ব্যবহারকারীর অবস্থান গ্রহণ বা প্রত্যাখ্যানের জন্য ডায়ালগ প্রোগ্রামার দ্বারা ডিজাইন করা হয়েছে: ডি। ক্রিস ক্যাশওয়েল যেমন বলেছিলেন, আপনি কেবল এইরকম কলব্যাক ব্যবহার করুন:

webview.setWebChromeClient(new WebChromeClient(){
  public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) {
    // callback.invoke(String origin, boolean allow, boolean remember);
    callback.invoke(origin, true, false);
  }
});

কিছু ক্ষেত্রে, এইচটিএমএল 5 টি স্টোরেজ ব্যবহারের প্রয়োজন, সুতরাং আপনাকে অবশ্যই কয়েকটি বৈশিষ্ট্য সক্ষম করতে হবে যাতে স্বাভাবিকভাবে চালানোর জন্য ওয়েবভিউতে সম্পূর্ণ অ্যাক্সেস থাকে।

    // HTML5 API flags
    webView.getSettings().setAppCacheEnabled(true);
    webView.getSettings().setDatabaseEnabled(true);
    webView.getSettings().setDomStorageEnabled(true);

17

আপনি কি আপনার ম্যানিফেস্টে সেই অনুমতিটি ঘোষণা করছেন?

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

এগুলির মতো আপনাকে অন্যান্য অবস্থানের অনুমতিও ঘোষণা করতে হতে পারে:

<uses-permission android:name="android.permission.ACCESS_GPS" />
<uses-permission android:name="android.permission.ACCESS_ASSISTED_GPS" />
<uses-permission android:name="android.permission.ACCESS_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

4
হ্যাঁ আমি এই অনুমতিগুলি ঘোষণা করি। ওয়েবভিউ ব্যবহারকারীর অবস্থান নেয়, তবে সমস্যাটি হ'ল ও অবস্থানকারীর অবস্থান অস্বীকার করার জন্য ডায়ালগটি প্রদর্শিত হবে না।
স্টি

4
শুধুমাত্র প্রথম এক প্রয়োজন!
TacB0sS

16

আমার কর্মক্ষম ক্রিয়াকলাপটি ভাগ করে নেওয়া, এটি একটি সম্পূর্ণ সমাধান যা প্রদর্শিত হতে পারে

  • ওয়েব পৃষ্ঠাটি লোড হওয়ার সময় লোডিং কথোপকথন দেখানো হচ্ছে
  • মার্শমেলো এবং তারপরে উপরের জন্য অনুরোধ করুন
  • ওয়েবপৃষ্ঠা ত্রুটি হ্যান্ডেল
  • ইন্টারনেট সংযোগের জন্য পরীক্ষা করুন এবং সেটিং পৃষ্ঠাটি খুলুন
  • ডায়ালগ সহ এবং ছাড়াই ভূ-অবস্থান অনুমতি পরিচালনা করা

আশা করি, এটি কারও সময় সাশ্রয় করে

    /**
     * Created by Hitesh.Sahu on 3/24/2017.
     */

    public class WebViewActivity extends AppCompatActivity {

        final private int REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS = 124;
        private int webViewPreviousState;
        private final int PAGE_STARTED = 0x1;
        private final int PAGE_REDIRECTED = 0x2;
        private CoordinatorLayout rootView;
        private WebView webView;


        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_webview);
            webView = (WebView) findViewById(R.id.webView);
            rootView = (CoordinatorLayout) findViewById(R.id.root_view);

            if (Build.VERSION.SDK_INT >= 23) {
                // Marshmallow+ Permission APIs
                fuckMarshMallow();
            }

            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                if (0 != (getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE)) {
                    WebView.setWebContentsDebuggingEnabled(true);
                }
            }
            webView.setInitialScale(1);
            webView.getSettings().setLoadWithOverviewMode(true);
            webView.getSettings().setUseWideViewPort(true);
            webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
            webView.setScrollbarFadingEnabled(false);

            webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
            webView.getSettings().setBuiltInZoomControls(true);
            webView.setWebViewClient(new GeoWebViewClient());
            // Below required for geolocation
            webView.getSettings().setJavaScriptEnabled(true);
            webView.getSettings().setGeolocationEnabled(true);
            webView.setWebChromeClient(new GeoWebChromeClient());

            webView.getSettings().setAppCacheEnabled(true);
            webView.getSettings().setDatabaseEnabled(true);
            webView.getSettings().setDomStorageEnabled(true);

            webView.getSettings().setGeolocationDatabasePath(getFilesDir().getPath());

            webView.loadUrl("file:///android_asset/index.html");
        }

        /**
         * WebChromeClient subclass handles UI-related calls
         * Note: think chrome as in decoration, not the Chrome browser
         */
        public class GeoWebChromeClient extends android.webkit.WebChromeClient {
            @Override
            public void onGeolocationPermissionsShowPrompt(final String origin,
                                                           final GeolocationPermissions.Callback callback) {
                // Always grant permission since the app itself requires location
                // permission and the user has therefore already granted it
                callback.invoke(origin, true, false);

    //            final boolean remember = false;
    //            AlertDialog.Builder builder = new AlertDialog.Builder(WebViewActivity.this);
    //            builder.setTitle("Locations");
    //            builder.setMessage("Would like to use your Current Location ")
    //                    .setCancelable(true).setPositiveButton("Allow", new DialogInterface.OnClickListener() {
    //                public void onClick(DialogInterface dialog, int id) {
    //                    // origin, allow, remember
    //                    callback.invoke(origin, true, remember);
    //                }
    //            }).setNegativeButton("Don't Allow", new DialogInterface.OnClickListener() {
    //                public void onClick(DialogInterface dialog, int id) {
    //                    // origin, allow, remember
    //                    callback.invoke(origin, false, remember);
    //                }
    //            });
    //            AlertDialog alert = builder.create();
    //            alert.show();
            }
        }

        /**
         * WebViewClient subclass loads all hyperlinks in the existing WebView
         */
        public class GeoWebViewClient extends WebViewClient {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                // When user clicks a hyperlink, load in the existing WebView
                view.loadUrl(url);
                return true;
            }

            Dialog loadingDialog = new Dialog(WebViewActivity.this);

            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                super.onPageStarted(view, url, favicon);
                webViewPreviousState = PAGE_STARTED;

                if (loadingDialog == null || !loadingDialog.isShowing())
                    loadingDialog = ProgressDialog.show(WebViewActivity.this, "",
                            "Loading Please Wait", true, true,
                            new DialogInterface.OnCancelListener() {

                                @Override
                                public void onCancel(DialogInterface dialog) {
                                    // do something
                                }
                            });

                loadingDialog.setCancelable(false);
            }


            @RequiresApi(api = Build.VERSION_CODES.M)
            @Override
            public void onReceivedError(WebView view, WebResourceRequest request,
                                        WebResourceError error) {


                if (isConnected()) {
                    final Snackbar snackBar = Snackbar.make(rootView, "onReceivedError : " + error.getDescription(), Snackbar.LENGTH_INDEFINITE);
                    snackBar.setAction("Reload", new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {
                            webView.loadUrl("javascript:window.location.reload( true )");
                        }
                    });
                    snackBar.show();
                } else {
                    final Snackbar snackBar = Snackbar.make(rootView, "No Internet Connection ", Snackbar.LENGTH_INDEFINITE);
                    snackBar.setAction("Enable Data", new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {
                            startActivityForResult(new Intent(Settings.ACTION_WIRELESS_SETTINGS), 0);
                            webView.loadUrl("javascript:window.location.reload( true )");
                            snackBar.dismiss();
                        }
                    });
                    snackBar.show();
                }

                super.onReceivedError(view, request, error);

            }

            @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
            @Override
            public void onReceivedHttpError(WebView view,
                                            WebResourceRequest request, WebResourceResponse errorResponse) {

                if (isConnected()) {
                    final Snackbar snackBar = Snackbar.make(rootView, "HttpError : " + errorResponse.getReasonPhrase(), Snackbar.LENGTH_INDEFINITE);

                    snackBar.setAction("Reload", new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {
                            webView.loadUrl("javascript:window.location.reload( true )");
                        }
                    });
                    snackBar.show();
                } else {
                    final Snackbar snackBar = Snackbar.make(rootView, "No Internet Connection ", Snackbar.LENGTH_INDEFINITE);
                    snackBar.setAction("Enable Data", new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {
                            startActivityForResult(new Intent(Settings.ACTION_WIRELESS_SETTINGS), 0);
                            webView.loadUrl("javascript:window.location.reload( true )");
                            snackBar.dismiss();
                        }
                    });
                    snackBar.show();
                }
                super.onReceivedHttpError(view, request, errorResponse);
            }

            @Override
            public void onPageFinished(WebView view, String url) {

                if (webViewPreviousState == PAGE_STARTED) {

                    if (null != loadingDialog) {
                        loadingDialog.dismiss();
                        loadingDialog = null;
                    }
                }
            }
        }


        /**
         * Check if there is any connectivity
         *
         * @return is Device Connected
         */
        public boolean isConnected() {

            ConnectivityManager cm = (ConnectivityManager)
                    this.getSystemService(Context.CONNECTIVITY_SERVICE);

            if (null != cm) {
                NetworkInfo info = cm.getActiveNetworkInfo();
                return (info != null && info.isConnected());
            }

            return false;

        }

        @Override
        public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
            switch (requestCode) {
                case REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS: {
                    Map<String, Integer> perms = new HashMap<String, Integer>();
                    // Initial
                    perms.put(Manifest.permission.ACCESS_FINE_LOCATION, PackageManager.PERMISSION_GRANTED);


                    // Fill with results
                    for (int i = 0; i < permissions.length; i++)
                        perms.put(permissions[i], grantResults[i]);

                    // Check for ACCESS_FINE_LOCATION
                    if (perms.get(Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED


                            ) {
                        // All Permissions Granted

                        // Permission Denied
                        Toast.makeText(WebViewActivity.this, "All Permission GRANTED !! Thank You :)", Toast.LENGTH_SHORT)
                                .show();

                    } else {
                        // Permission Denied
                        Toast.makeText(WebViewActivity.this, "One or More Permissions are DENIED Exiting App :(", Toast.LENGTH_SHORT)
                                .show();

                        finish();
                    }
                }
                break;
                default:
                    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
            }
        }

        @TargetApi(Build.VERSION_CODES.M)
        private void fuckMarshMallow() {
            List<String> permissionsNeeded = new ArrayList<String>();

            final List<String> permissionsList = new ArrayList<String>();
            if (!addPermission(permissionsList, Manifest.permission.ACCESS_FINE_LOCATION))
                permissionsNeeded.add("Show Location");

            if (permissionsList.size() > 0) {
                if (permissionsNeeded.size() > 0) {

                    // Need Rationale
                    String message = "App need access to " + permissionsNeeded.get(0);

                    for (int i = 1; i < permissionsNeeded.size(); i++)
                        message = message + ", " + permissionsNeeded.get(i);

                    showMessageOKCancel(message,
                            new DialogInterface.OnClickListener() {

                                @Override
                                public void onClick(DialogInterface dialog, int which) {
                                    requestPermissions(permissionsList.toArray(new String[permissionsList.size()]),
                                            REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS);
                                }
                            });
                    return;
                }
                requestPermissions(permissionsList.toArray(new String[permissionsList.size()]),
                        REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS);
                return;
            }

            Toast.makeText(WebViewActivity.this, "No new Permission Required- Launching App .You are Awesome!!", Toast.LENGTH_SHORT)
                    .show();
        }


        private void showMessageOKCancel(String message, DialogInterface.OnClickListener okListener) {
            new AlertDialog.Builder(WebViewActivity.this)
                    .setMessage(message)
                    .setPositiveButton("OK", okListener)
                    .setNegativeButton("Cancel", null)
                    .create()
                    .show();
        }

        @TargetApi(Build.VERSION_CODES.M)
        private boolean addPermission(List<String> permissionsList, String permission) {

            if (checkSelfPermission(permission) != PackageManager.PERMISSION_GRANTED) {
                permissionsList.add(permission);
                // Check for Rationale Option
                if (!shouldShowRequestPermissionRationale(permission))
                    return false;
            }
            return true;
        }
    }

4
এটিই একমাত্র উত্তর যা এই বিষয়টি বিবেচনায় নিয়েছিল যে অ্যান্ড্রয়েড সংস্করণ 6+ তৈরি করার সময় আপনাকে রান সময়কালে অনুমতি চাইতে হবে to
হাটজাভিভ

4
এলএমএও, এফ মার্শমেলো। হাহাহাহা।
তাসলিম ওসেনি

5

এটি তার / তার অবস্থান ব্যবহার করার জন্য ব্যবহারকারীর অনুমতি প্রচারের জন্য সতর্কতা ডায়ালগ দেখানোর একটি উদাহরণ:

    final Context context = this;

     @Override
     public void onGeolocationPermissionsShowPrompt(final String origin, final GeolocationPermissions.Callback callback) {
        Log.i(TAG, "onGeolocationPermissionsShowPrompt()");

        final boolean remember = false;
        AlertDialog.Builder builder = new AlertDialog.Builder(context);
        builder.setTitle("Locations");
        builder.setMessage("Would like to use your Current Location ")
        .setCancelable(true).setPositiveButton("Allow", new DialogInterface.OnClickListener() {
           public void onClick(DialogInterface dialog, int id) {
              // origin, allow, remember
              callback.invoke(origin, true, remember);
           }
        }).setNegativeButton("Don't Allow", new DialogInterface.OnClickListener() {
           public void onClick(DialogInterface dialog, int id) {
              // origin, allow, remember
              callback.invoke(origin, false, remember);
           }
        });
        AlertDialog alert = builder.create();
        alert.show();
     }

4
ধন্যবাদ! একটি ছোটখাটো ঝাপটান: সতর্কতা ডায়ালগের কাছে বিতর্কটি পাস হয়েছে u বিল্ডার নির্মাতাকে আপনার ক্রিয়াকলাপ হওয়া উচিত। সেই প্রসঙ্গে, "এটি" ভুল।
জোসেফ লেনাক্স

যে কেউ আমাকে এর জন্য পুরোপুরি কার্যকারী নমুনা কোড দিতে পারে। আগাম ধন্যবাদ.
shams

4
আমি এই সব করেছি কিন্তু কোড এখনও ভোগ করছে না ভুল কী? আমি অন্ধকার এমুলেটর এটা পরীক্ষা করছি
শামস

2

আমি সম্প্রতি এই ধরণের পরিস্থিতিটি নিয়ে এসেছি এবং এটি অর্জনের জন্য নীচের পদক্ষেপগুলি করেছি:

পদক্ষেপ 1: আপনার AndroidManifest.xmlফাইলে অনুমতি যুক্ত করুন

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 

পদক্ষেপ 2: এমন একটি ক্রিয়াকলাপ তৈরি করুন যাতে এতে WebViewএবং ProgressBar(আমার ক্ষেত্রে) থাকে

xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <ProgressBar
        android:id="@+id/progressBar"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_margin="0dp"
        android:minHeight="4dp"
        android:padding="0dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
    <WebView
        android:id="@+id/webView"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/progressBar" />
</androidx.constraintlayout.widget.ConstraintLayout>

পদক্ষেপ 3: আপনার ক্রিয়াকলাপ শ্রেণিতে কোডের নীচে যুক্ত করুন এবং আপনার প্রয়োজন অনুসারে পরিবর্তন করুন

class WebActivity : AppCompatActivity() {
    var pageUrl: String = "https://couponia.co/"
    var mGeoLocationRequestOrigin: String? = null
    var mGeoLocationCallback: GeolocationPermissions.Callback? = null
    val MAX_PROGRESS = 100
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_web)
        initWebView()
        setWebClient()
        loadUrl(pageUrl)
    }


    @SuppressLint("SetJavaScriptEnabled")
    private fun initWebView() {
        webView.settings.javaScriptEnabled = true
        webView.settings.loadWithOverviewMode = true
        webView.settings.useWideViewPort = true
        webView.settings.domStorageEnabled = true
        webView.settings.databaseEnabled = true
        webView.settings.setAppCacheEnabled(true)
        webView.webViewClient = object : WebViewClient() {
            override
            fun onReceivedSslError(view: WebView?, handler: SslErrorHandler?, error: SslError?) {
                handler?.proceed()
            }
        }

    }

    private fun setWebClient() {

        webView.webChromeClient = object : WebChromeClient() {
            override fun onGeolocationPermissionsShowPrompt(
                origin: String?,
                callback: GeolocationPermissions.Callback?
            ) {

                if (ContextCompat.checkSelfPermission(
                        this@WebActivity,
                        Manifest.permission.ACCESS_FINE_LOCATION
                    )
                    != PackageManager.PERMISSION_GRANTED
                ) {

                    if (ActivityCompat.shouldShowRequestPermissionRationale(
                            this@WebActivity,
                            Manifest.permission.ACCESS_FINE_LOCATION
                        )
                    ) {
                        AlertDialog.Builder(this@WebActivity)
                            .setMessage("Please turn ON the GPS to make app work smoothly")
                            .setNeutralButton(
                                android.R.string.ok,
                                DialogInterface.OnClickListener { dialogInterface, i ->
                                    mGeoLocationCallback = callback
                                    mGeoLocationRequestOrigin = origin
                                    ActivityCompat.requestPermissions(
                                        this@WebActivity,
                                        arrayOf(Manifest.permission.ACCESS_FINE_LOCATION), 1001
                                    )

                                })
                            .show()

                    } else {
                        //no explanation need we can request the locatio
                        mGeoLocationCallback = callback
                        mGeoLocationRequestOrigin = origin
                        ActivityCompat.requestPermissions(
                            this@WebActivity,
                            arrayOf(Manifest.permission.ACCESS_FINE_LOCATION), 1001
                        )
                    }
                } else {
                    //tell the webview that permission has granted
                    callback!!.invoke(origin, true, true)
                }

            }

            override fun onProgressChanged(view: WebView?, newProgress: Int) {
                super.onProgressChanged(view, newProgress)
                progressBar.progress = newProgress
                if (newProgress < MAX_PROGRESS && progressBar.visibility == ProgressBar.GONE) {
                    progressBar.visibility = ProgressBar.VISIBLE
                }
                if (newProgress == MAX_PROGRESS) {
                    progressBar.visibility = ProgressBar.GONE
                }
            }


        }
    }

    override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
        // Check if the key event was the Back button and if there's history
        if (keyCode == KeyEvent.KEYCODE_BACK && webView.canGoBack()) {
            webView.goBack()
            return true
        }
        // If it wasn't the Back key or there's no web page history, exit the activity)
        return super.onKeyDown(keyCode, event)
    }

    private fun loadUrl(pageUrl: String) {
        webView.loadUrl(pageUrl)
    }


    override fun onRequestPermissionsResult(
        requestCode: Int,
        permissions: Array<out String>,
        grantResults: IntArray
    ) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)

        when (requestCode) {
            1001 -> {
                //if permission is cancel result array would be empty
                if (grantResults.size > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    //permission was granted
                    if (mGeoLocationCallback != null) {
                        mGeoLocationCallback!!.invoke(mGeoLocationRequestOrigin, true, true)
                    }
                } else {
                    //permission denied
                    if (mGeoLocationCallback != null) {
                        mGeoLocationCallback!!.invoke(mGeoLocationRequestOrigin, false, false)
                    }
                }
            }

        }
    }
}

0

এক পোস্টে থাকা সমস্ত কিছু সহ আপডেটেড অ্যান্ড্রয়েডের নতুন উত্তর হিসাবে পোস্ট করা, কারণ আপনার আর ব্যবহারের দরকার নেই setWebChromeClient

অ্যান্ড্রয়েড 6+ সহ আপনি রানটাইম ব্যবহারের সময় জিপিএসের অনুমতি চাইতে পারেন ActivityCompat.requestPermissions(context, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 123);

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.