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

এন্ড্রয়েড ডিভাইসে ফোন কল শনাক্ত করার পদ্ধতি

এন্ড্রয়েডে ফোন কল শনাক্ত করার ধাপাবলী

এই উদাহরণটি দেখায় কীভাবে BroadcastReceiver ব্যবহার করে ফোন কলের স্টেট পরিবর্তন (রিংিং, অফহুক, আইডল) শনাক্ত করা যায়। `READ_PHONE_STATE` অনুমতি এবং `PHONE_STATE` ইন্টেন্ট ফিল্টার প্রয়োজন।

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

Android Studio-তে File → New Project এ যান এবং প্রয়োজনীয় বিবরণ পূরণ করে একটি নতুন প্রজেক্ট তৈরি করুন।

ধাপ ২: লেআউট ফাইল (res/layout/activity_main.xml)

<?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:text="হ্যালো ওয়ার্ল্ড!"
        android:textStyle="bold"
        android:textColor="@color/colorPrimary"
        android:layout_centerInParent="true" />
</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 {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_PHONE_STATE}, 1);
        } else {
            notifyPermissionGranted();
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        if (requestCode == 1) {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                Toast.makeText(this, "অনুমতি প্রদান করা হয়েছে", Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(this, "অনুমতি অস্বীকৃত", Toast.LENGTH_SHORT).show();
            }
        }
    }
    
    private void notifyPermissionGranted() {
        // পারমিশন পাওয়ার পর আপনার লজিক এখানে
    }
}

ধাপ ৪: ব্রডকাস্ট রিসিভার ক্লাস (src/DetectCalls.java)

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.TelephonyManager;
import android.widget.Toast;

public class DetectCalls extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        try {
            String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
            String number = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);
            
            if (TelephonyManager.EXTRA_STATE_RINGING.equals(state)) {
                Toast.makeText(context, "রিংিং: " + number, Toast.LENGTH_SHORT).show();
            } else if (TelephonyManager.EXTRA_STATE_OFFHOOK.equals(state)) {
                Toast.makeText(context, "কল গ্রহণ করা হয়েছে", Toast.LENGTH_SHORT).show();
            } else if (TelephonyManager.EXTRA_STATE_IDLE.equals(state)) {
                Toast.makeText(context, "কল সমাপ্ত", Toast.LENGTH_SHORT).show();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

ধাপ ৫: ম্যানিফেস্ট ফাইল (AndroidManifest.xml)

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android" package="app.com.sample">
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <receiver android:name=".DetectCalls">
            <intent-filter>
                <action android:name="android.intent.action.PHONE_STATE"/>
            </intent-filter>
        </receiver>
    </application>
</manifest>

গুরুত্বपूर्ण নোট (Android 10+)

অ্যান্ড্রয়েড ১০ (API 29) থেকে `READ_PHONE_STATE` অনুমতির পাশাপাশি `READ_CALL_LOG` বা ফোরগ্রাউন্ড সার্ভিস প্রয়োজন হতে পারে। আধুনিক সংস্করণে `TelephonyCallback` ব্যবহার করা ভালো।

অ্যাপ্লিকেশন চালান

আপনার আসল এন্ড্রয়েড ডিভাইস কম্পিউটারের সাথে সংযুক্ত আছে অনুমান করি। Android Studio-তে আপনার প্রজেক্টের এক্টিভিটি ফাইল খুলুন এবং টুলবারের Run আইকনে ক্লিক করুন। আপনার মোবাইল ডিভাইস নির্বাচন করুন এবং আপনার ডিভাইসে ডিফল্ট স্ক্রিন দেখুন।

  1. অ্যান্ড্রয়েড অ্যাপে শেক ইভেন্ট কীভাবে সনাক্ত করবেন?

  2. অ্যান্ড্রয়েডে ডিভাইস ফোন নাকি ট্যাবলেট সেটা ডিটেক্ট করা

  3. PC ছাড়াই নিরাপদে আপনার Android ডিভাইস রুট করুন

  4. অ্যান্ড্রয়েডে হুয়াটসঅ্যাপ কল মিউট করার ধাপে ধাপে গাইড