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

অ্যান্ড্রয়েডে এক্টিভিটি থেকে রিংটোন সেট করা

RingtoneManager ব্যবহার করে সিস্টেম রিংটোন পিকার খোলা এবং নির্বাচন করা

এই উদাহরণে দেখানো হয়েছে কীভাবে RingtoneManager.ACTION_RINGTONE_PICKER ইন্টেন্ট ব্যবহার করে সিস্টেম রিংটোন সিলেক্টর খুলা যায় এবং নির্বাচিত রিংটোনের URI পাওয়া যায়।

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

Android Studio-তে নতুন প্রজেক্ট তৈরি করুন।

দ্বিতীয় ধাপ: লেআউট ফাইল

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">
    <Button
        android:id="@+id/btnSelRingtone"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="Select Ringtone"/>
    <TextView
        android:id="@+id/tvRingtone"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:textStyle="bold|italic"
        android:layout_below="@id/btnSelRingtone"
        android:text="Ringtone Path"/>
</RelativeLayout>

তৃতীয় ধাপ: মেইন এক্টিভিটিতে রিংটোন পিকার লজিক

src/MainActivity.java:

import android.annotation.SuppressLint;
import android.content.Intent;
import android.media.RingtoneManager;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    Button btn;
    TextView txtView;
    private static final int RINGTONE_REQUEST_CODE = 999;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        btn = findViewById(R.id.btnSelRingtone);
        txtView = findViewById(R.id.tvRingtone);
        
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // বর্তমান ডিফল্ট রিংটোন URI
                final Uri currentTone = RingtoneManager.getActualDefaultRingtoneUri(
                        MainActivity.this, RingtoneManager.TYPE_ALARM);
                
                // রিংটোন পিকার ইন্টেন্ট তৈরি
                Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
                intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_RINGTONE);
                intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "Select Tone");
                intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, currentTone);
                intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, false);
                intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true);
                
                startActivityForResult(intent, RINGTONE_REQUEST_CODE);
            }
        });
    }
    
    @SuppressLint("SetTextI18n")
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == RINGTONE_REQUEST_CODE && resultCode == RESULT_OK) {
            // নির্বাচিত রিংটোন URI পাওয়া
            Uri uri = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
            if (uri != null) {
                txtView.setText("From: " + uri.toString());
            } else {
                txtView.setText("Silent selected");
            }
        }
    }
}

চতুর্থ ধাপ: পারমিশন এবং ম্যানিফেস্ট

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    package="app.com.sample">
    <uses-permission
        android:name="android.permission.WRITE_SETTINGS"
        tools:ignore="ProtectedPermissions" />
    <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>
    </application>
</manifest>

RingtoneManager টাইপ কনস্ট্যান্টস

  • TYPE_RINGTONE - ফোন রিংটোন
  • TYPE_NOTIFICATION - নোটিফিকেশন সাউন্ড
  • TYPE_ALARM - এলার্ম টোন
  • TYPE_ALL - সব টাইপ

গুরুত্বপূর্ণ নোট

  • WRITE_SETTINGS পারমিশন সিস্টেম সেটিংস পরিবর্তনের জন্য লাগে (Android 6.0+ এ বিশেষ হ্যান্ডলিং দরকার)
  • এই কোড শুধু রিংটোন **নির্বাচন** করে, সিস্টেম রিংটোন সেট করে না। সেট করতে RingtoneManager.setActualDefaultRingtoneUri() ব্যবহার করুন
  • Android 10+ (API 29+) এScoped Storage-র কারণে কিছু ডিভাইসে আচরণ ভিন্ন হতে পারে

রিংটোন সিস্টেমে সেট করা (অতিরিক্ত)

// onActivityResult-এ uri পাওয়ার পর
RingtoneManager.setActualDefaultRingtoneUri(this, RingtoneManager.TYPE_RINGTONE, uri);

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

"Select Ringtone" বাটনে ক্লিক করলে সিস্টেম রিংটোন পিকার খুলবে। একটি রিংটোন নির্বাচন করলে তার URI পথ টেক্সটভিউতে দেখাবে।

অ্যান্ড্রয়েডে এক্টিভিটি থেকে রিংটোন সেট করা অ্যান্ড্রয়েডে এক্টিভিটি থেকে রিংটোন সেট করা

  1. অ্যান্ড্রয়েড এক্টিভিটির ব্যাকগ্রাউন্ড রঙ প্রোগ্রামেটিক্যালি হলদে করা

  2. অ্যান্ড্রয়েডে এক্টিভিটির থেকে ফ্র্যাগমেন্টে ভেরিয়েবল পাস করার পদ্ধতি

  3. অ্যান্ড্রয়েডে কাস্টম টেক্সট মেসেজ রিংটোন সেট করার ধাপে ধাপে গাইড

  4. অ্যান্ড্রয়েডে কাস্টম টেক্সট মেসেজ রিংটোন: আপনার সতর্কতাকে ব্যক্তিগত করুন