কম্পিউটার টিউটোরিয়াল

অ্যান্ড্রয়েডে রানটাইমে লোকেশন পারমিশন অনুরোধ করার পদ্ধতি

রানটাইম পারমিশন মডেল অনুযায়ী লোকেশন পারমিশন চাওয়া

Android 6.0 (API 23) থেকে বিপজ্জনক পারমিশন (যেমন লোকেশন) রানটাইমে ব্যবহারকারীর থেকে চাওয়া হয়। এই টিউটোরিয়ালে ActivityCompat.requestPermissions() এবং onRequestPermissionsResult() ব্যবহার করে সঠিক পদ্ধতি দেখানো হয়েছে।

ধাপ ১: প্রজেক্ট তৈরি করুন

স্ট্যান্ডার্ড অ্যান্ড্রয়েড প্রজেক্ট।

ধাপ ২: সাধারণ লেআউট

res/layout/activity_main.xml - শুধু তথ্যবহ:TextView:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:padding="4dp"
        android:text="Request Location permission at Run time!"
        android:textSize="36sp"
        android:textStyle="bold" />
</RelativeLayout>

ধাপ ৩: পারমিশন লজিক

src/MainActivity.java:

import android.Manifest;
import android.content.pm.PackageManager;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    private static final int LOCATION_PERMISSION_REQUEST_CODE = 1;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        checkLocationPermission();
    }
    
    private void checkLocationPermission() {
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
                != PackageManager.PERMISSION_GRANTED) {
            
            // ইউজারকে ব্যাখ্যা দরকার কিনা চেক করুন
            if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                    Manifest.permission.ACCESS_FINE_LOCATION)) {
                // ইউজার আগে ডেনাই করেছে, কারণ ব্যাখ্যা দেখান
                showPermissionRationale();
            } else {
                // প্রথমবার চাইছেন বা "Don't ask again" চেক করা হয়নি
                requestLocationPermission();
            }
        } else {
            // ইতিমধ্যে পারমিশন আছে
            Toast.makeText(this, "Permission already granted", Toast.LENGTH_SHORT).show();
        }
    }
    
    private void showPermissionRationale() {
        // এখানে একটি ডায়ালগ দেখিয়ে পারমিশনের কারণ ব্যাখ্যা করুন
        // তারপর requestLocationPermission() কল করুন
        requestLocationPermission();
    }
    
    private void requestLocationPermission() {
        ActivityCompat.requestPermissions(this,
                new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                LOCATION_PERMISSION_REQUEST_CODE);
    }
    
    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        if (requestCode == LOCATION_PERMISSION_REQUEST_CODE) {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                Toast.makeText(this, "Permission Granted", Toast.LENGTH_SHORT).show();
                // এখন লোকেশন অ্যাক্সেস করুন
            } else {
                Toast.makeText(this, "Permission Denied", Toast.LENGTH_SHORT).show();
                // ইউজার ডেনাই করলে ফিচার অক্ষম করুন বা আবার চান
                if (!ActivityCompat.shouldShowRequestPermissionRationale(this,
                        Manifest.permission.ACCESS_FINE_LOCATION)) {
                    // "Don't ask again" চেক করা হয়েছে - সেটিংসে পাঠান
                    showSettingsDialog();
                }
            }
        }
    }
    
    private void showSettingsDialog() {
        // ব্যবহারকারীকে অ্যাপ সেটিংসে যেতে বলুন
    }
}

ধাপ ৪: ম্যানিফেস্টে পারমিশন ডিক্লেয়ার করুন

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

সেরা অনুশীলন (Best Practices)

  • ContextCompat এবং ActivityCompat ব্যবহার করুন (সাপোর্ট লাইব্রেরি)
  • পারমিশন কোডের জন্য কনস্ট্যান্ট ব্যবহার করুন
  • shouldShowRequestPermissionRationale() চেক করুন - ইউজারকে ব্যাখ্যা দিন
  • "Don't ask again" হলে অ্যাপ সেটিংসে রিডাইরেক্ট করুন
  • একাধিক পারমিশন একসাথে চাইলে অ্যারে পাস করুন
অ্যান্ড্রয়েডে রানটাইমে লোকেশন পারমিশন অনুরোধ করার পদ্ধতি অ্যান্ড্রয়েডে রানটাইমে লোকেশন পারমিশন অনুরোধ করার পদ্ধতি
  1. ম্যাকে অ্যান্ড্রয়েড অ্যাপ চালানোর উপায়

  2. Phoenix OS দিয়ে PC-তে অ্যান্ড্রয়েড চালানোর পদ্ধতি

  3. অ্যান্ড্রয়েড ডিভাইসে GPS লোকেশন সফলভাবে স্পুফ করার পদ্ধতি

  4. উইন্ডোজ ১১-এ অ্যান্ড্রয়েড অ্যাপ চালান: ধাপে ধাপে গাইড