Android
 Computer >> コンピューター >  >> プログラミング >> Android

KotlinでAndroidアプリから着信音を設定する方法をわかりやすく解説

このチュートリアルでは、Kotlinを使ってAndroidアクティビティから端末の着信音を設定する方法を解説します。システム標準の「着信音ピッカー」を呼び出し、ユーザーが選択した着信音のURIを取得して画面に表示する、シンプルなサンプルアプリを作成していきます。

実装の全体像

今回作成するアプリの処理の流れは次のとおりです。ボタンをタップすると着信音選択画面が起動し、選んだ着信音のパスがTextViewに表示されます。着信音の取得や選択画面の呼び出しには、Android標準のRingtoneManagerクラスを使用します。

ステップ1:新規プロジェクトの作成

Android Studioを開き、「File」→「New Project」から新しいプロジェクトを作成します。プロジェクト名やパッケージ名など必要な項目を入力し、「Empty Activity」テンプレートを選択しておくとスムーズです。

ステップ2:レイアウトファイル(activity_main.xml)の編集

res/layout/activity_main.xml に以下のコードを記述します。「Select Ringtone」ボタンと、選択結果を表示する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_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="Select Ringtone" />
    <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="Ringtone Path"
        android:textStyle="bold|italic" />
</RelativeLayout>

ステップ3:MainActivity.kt の実装

src/MainActivity.kt に以下のコードを記述します。まず getActualDefaultRingtoneUri() で現在のデフォルト着信音のURIを取得し、ACTION_RINGTONE_PICKER インテントに各種オプションを設定してピッカーを起動します。

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() {
    lateinit var btn: Button
    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 {
            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, "Select Tone")
            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 = "From :" + uri.path
        }
    }
}

コードのポイント
・EXTRA_RINGTONE_TYPE に TYPE_RINGTONE を指定することで、着信音の一覧を表示できます。
・EXTRA_RINGTONE_SHOW_SILENT を false にすると「無音」が選択肢から除外されます。
・EXTRA_RINGTONE_EXISTING_URI に現在の着信音URIを渡すと、ピッカー上で現在の設定がハイライト表示されます。
・選択結果は onActivityResult() で受け取り、EXTRA_RINGTONE_PICKED_URI から選択された着信音のURIを取得します。

なお、onActivityResult() は比較的新しいバージョンのAndroidXでは非推奨(Deprecated)となっています。最新のプロジェクトでは、ActivityResultContracts.StartActivityForResult を使ったコールバック方式への置き換えが推奨されている点に留意してください。

ステップ4:AndroidManifest.xml への権限追加

着信音などのシステム設定を変更するため、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>

アプリの実行と動作確認

それでは、実際にアプリを実行してみましょう。あらかじめ実機のAndroidスマートフォンをPCに接続しておいてください。Android Studioでプロジェクト内のアクティビティファイルを開き、ツールバーの「Run」アイコンをクリックします。接続したモバイルデバイスを選択してアプリを起動すると、スマートフォン側にアプリの初期画面が表示されます。

KotlinでAndroidアプリから着信音を設定する方法をわかりやすく解説

アプリが起動したら「Select Ringtone」ボタンをタップしてください。着信音選択画面が表示されるので、好みの着信音を選びます。選択が完了すると、その着信音のパスが画面下部のTextViewに表示されれば成功です。

  1. 【Android開発】アクティビティから着信音を設定・選択する方法を解説

    本記事では、Androidアプリのアクティビティ(Activity)から着信音(リングトーン)を設定・選択する方法を、サンプルコードとともにステップ形式で解説します。このチュートリアルでは、RingtoneManagerクラスとACTION_RINGTONE_PICKERインテントを使用して、システム標準の着信音選択ダイアログを表示し、ユーザーが選択した着信音のURIを取得する流れを紹介します。ステップ1:新規プロジェクトの作成まず、Android Studioで新しいプロジェクトを作成しましょう。メニューから「File」⇒「New Project」を選択し、必要な情報を入力してプロジェクトを

  2. KotlinでAndroidのアクティビティ間にオブジェクトを渡す方法を徹底解説

    Kotlinを使用したAndroid開発では、Intent(インテント)を介してアクティビティ間でデータを受け渡すのが一般的です。本記事では、Serializableインターフェースを実装したカスタムオブジェクトを、あるアクティビティから別のアクティビティへ渡す方法を、サンプルコードとともにステップごとに解説します。 手順1:新規プロジェクトを作成する Android Studioを起動し、メニューから「File」→「New Project」を選択します。必要な項目をすべて入力して、新しいプロジェクトを作成しましょう。 手順2:レイアウトファイル(activity_main.xml)を編集する