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

কোটলিন ব্যবহার করে অ্যান্ড্রয়েড অ্যাপ থেকে রিংটোন সেট করার পদ্ধতি

এই উদাহরণটি দেখায় কিভাবে কোটলিন ব্যবহার করে অ্যান্ড্রয়েড অ্যাপ থেকে সিস্টেমের রিংটোন পিকার খুলে ব্যবহারকারীকে রিংটোন নির্বাচন দেয়া যায় এবং নির্বাচিত রিংটোনের পাথ দেখানো যায়।

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

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

দ্বিতীয় ধাপ: লেআউট XML ডিজাইন করুন

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_centerHorizontal="true"
        android:layout_marginTop="50dp"
        android:text="Tutorials Point"
        android:textAlignment="center"
        android:textColor="@android:color/holo_green_dark"
        android:textSize="32sp"
        android:textStyle="bold" />

    <Button
        android:id="@+id/btnSelRingtone"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="রিংটোন নির্বাচন করুন" />

    <TextView
        android:id="@+id/tvRingtone"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/btnSelRingtone"
        android:layout_centerInParent="true"
        android:text="রিংটোন পাথ"
        android:textStyle="bold|italic" />

</RelativeLayout>

তৃতীয় ধাপ: MainActivity.kt তে রিংটোন পিকার লজিক লিখুন

src/MainActivity.kt ফাইলে নিচের কোড যোগ করুন। মূল কোডে Activity.RESULT_OK রেফারেন্স ছিল কিন্তু ইম্পোর্ট ছিল না, সেটি যোগ করা হয়েছে:

import android.app.Activity
import android.content.Intent
import android.media.RingtoneManager
import android.net.Uri
import android.os.Bundle
import android.widget.Button
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity

class MainActivity : AppCompatActivity() {
    private lateinit var btn: Button
    private lateinit var txtView: TextView

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        title = "KotlinApp"

        btn = findViewById(R.id.btnSelRingtone)
        txtView = findViewById(R.id.tvRingtone)

        btn.setOnClickListener {
            // বর্তমান ডিফল্ট রিংটোন URI পান
            val currentRingtone: Uri = RingtoneManager.getActualDefaultRingtoneUri(
                this,
                RingtoneManager.TYPE_ALARM
            )

            // রিংটোন পিকার ইন্টেন্ট তৈরি করুন
            val intent = Intent(RingtoneManager.ACTION_RINGTONE_PICKER)
            intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_RINGTONE)
            intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "টোন নির্বাচন করুন")
            intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, currentRingtone)
            intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, false)
            intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true)

            startActivityForResult(intent, 999)
        }
    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (requestCode == 999 && resultCode == Activity.RESULT_OK) {
            val uri = data?.getParcelableExtra<Uri>(RingtoneManager.EXTRA_RINGTONE_PICKED_URI)
            txtView.text = "নির্বাচিত রিংটোন পাথ: ${uri?.path}"
        }
    }
}

চতুর্থ ধাপ: ম্যানিফেস্ট ফাইলে পারমিশন যোগ করুন

androidManifest.xml ফাইলে WRITE_SETTINGS পারমিশন যোগ করুন (অ্যান্ড্রয়েড ৬.০+ রানটাইম পারমিশন দরকার):

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="app.com.q1">

    <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>

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

  • WRITE_SETTINGS পারমিশন হলো "সুরক্ষিত পারমিশন"। অ্যান্ড্রয়েড ৬.০ (API 23) এবং তার উপরে এটিকে রানটাইমে অনুরোধ করতে হবে Settings.ACTION_MANAGE_WRITE_SETTINGS ইন্টেন্ট ব্যবহার করে।
  • এই উদাহরণে শুধু রিংটোন পিকার খুলা এবং URI দেখানো হয়েছে, আসলে সিস্টেম রিংটোন সেট করা নয়। সিস্টেম রিংটোন সেট করার জন্য RingtoneManager.setActualDefaultRingtoneUri() ব্যবহার করুন।

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

অ্যান্ড্রয়েড ডিভাইস সংযুক্ত করে Run করুন। "রিংটোন নির্বাচন করুন" বাটনে ক্লিক করলে সিস্টেম রিংটোন পিকার খুলবে। একটি রিংটোন নির্বাচন করলে তার পাথ TextView-এ দেখাবে।

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

  2. Kotlin ব্যবহার করে Android-এ প্রোগ্রামেটিক্যালি ImageView-এর মার্জিন সেট করা

  3. Kotlin-এ Intent ব্যবহার করে অ্যাক্টিভিটির মধ্যে অবজেক্ট পাস করা

  4. Kotlin-এ Intent দিয়ে অ্যাক্টিভিটির মধ্যে অবজেক্ট পাস করা (আরেক উদাহরণ)