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

অ্যান্ড্রয়েডে কল পিক আপ এবং হ্যাং আপ করার পদ্ধতি

ফোন কল স্টেট মনিটরিং এবং BroadcastReceiver ব্যবহার

অ্যান্ড্রয়েডে প্রোগ্রাম্যাটিক্যালি কল রিসিভ বা হ্যাং আপ করা সুরক্ষা nedeniyle সীমাবদ্ধ। তবে BroadcastReceiver এবং READ_PHONE_STATE পারমিশন ব্যবহার করে কল স্টেট (রিংিং, অফ-হুক, আইডল) মনিটর করা সম্ভব।

গুরুত্বपूर्ण সীমাবদ্ধতা

⚠️ নোট: Android 8.0 (API 26) থেকে ব্যাকগ্রাউন্ড এক্সিকিউশন লিমিট এবং Android 10+ এ কল লগ/স্টেট অ্যাক্সেস সীমাবদ্ধ। সিস্টেম ডায়ালার অ্যাপ ছাড়া অন্য অ্যাপ কল সরাসরি পিক আপ/হ্যাং আপ করতে পারে না।

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

স্ট্যান্ডার্ড সেটআপ।

ধাপ ২: লেআউট

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:layout_centerInParent="true"
        android:text="Pick up and hung up calls"
        android:textSize="24sp"
        android:textStyle="bold|italic" />
</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 PHONE_STATE_PERMISSION_CODE = 1;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        checkPhoneStatePermission();
    }
    
    private void checkPhoneStatePermission() {
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE)
                != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this,
                    new String[]{Manifest.permission.READ_PHONE_STATE},
                    PHONE_STATE_PERMISSION_CODE);
        } else {
            // পারমিশন আছে, টেলিফোনি ম্যানেজার সেটআপ করুন
            setupTelephonyListener();
        }
    }
    
    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        if (requestCode == PHONE_STATE_PERMISSION_CODE) {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                Toast.makeText(this, "Permission Granted", Toast.LENGTH_SHORT).show();
                setupTelephonyListener();
            } else {
                Toast.makeText(this, "Permission Denied", Toast.LENGTH_SHORT).show();
            }
        }
    }
    
    private void setupTelephonyListener() {
        // TelephonyManager এবং PhoneStateListener ব্যবহার করুন
        // এটি BroadcastReceiver-এর বিকল্প এবং আরও কার্যকর
    }
}

ধাপ ৪: BroadcastReceiver তৈরি করুন (পুরানো পদ্ধতি)

src/callManager.java:

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

public class CallManager 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, "Incoming call from: " + number, Toast.LENGTH_SHORT).show();
                // এখানে কল পিক আপ লজিক যোগ করা যাবে না (সুরক্ষা কারণে)
            } else if (TelephonyManager.EXTRA_STATE_OFFHOOK.equals(state)) {
                Toast.makeText(context, "Call answered", Toast.LENGTH_SHORT).show();
            } else if (TelephonyManager.EXTRA_STATE_IDLE.equals(state)) {
                Toast.makeText(context, "Call ended", Toast.LENGTH_SHORT).show();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

ধাপ ৫: ম্যানিফেস্টে রিসিভার রেজিস্টার করুন

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

<application ...>
    <receiver android:name=".CallManager" android:enabled="true" android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.PHONE_STATE" />
        </intent-filter>
    </receiver>
    ...
</application>

আধুনিক বিকল্প: PhoneStateListener

TelephonyManager telephonyManager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
telephonyManager.listen(new PhoneStateListener() {
    @Override
    public void onCallStateChanged(int state, String incomingNumber) {
        switch (state) {
            case TelephonyManager.CALL_STATE_RINGING:
                // রিং হচ্ছে
                break;
            case TelephonyManager.CALL_STATE_OFFHOOK:
                // কল সংযোগ হয়েছে
                break;
            case TelephonyManager.CALL_STATE_IDLE:
                // কল শেষ
                break;
        }
    }
}, PhoneStateListener.LISTEN_CALL_STATE);
অ্যান্ড্রয়েডে কল পিক আপ এবং হ্যাং আপ করার পদ্ধতি অ্যান্ড্রয়েডে কল পিক আপ এবং হ্যাং আপ করার পদ্ধতি
  1. অ্যান্ড্রয়েড ফোনে ফোন কল রেকর্ড করার উপায় – এবং কি এটি কানুনসঙ্গত?

  2. অ্যান্ড্রয়েডে ফাইল ও অ্যাপ সুরক্ষিতভাবে লুকান: ধাপে ধাপে গাইড

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

  4. অ্যান্ড্রয়েডে WhatsApp কল রেকর্ড করার ধাপে ধাপে গাইড — নিরাপদ ও সহজ