개요
이 튜토리얼에서는 안드로이드 액티비티(Activity)에서 RingtoneManager를 사용해 벨소리를 선택하고 설정하는 방법을 단계별로 살펴봅니다. 버튼을 누르면 시스템 벨소리 선택 화면이 열리고, 사용자가 고른 벨소리의 경로가 화면에 표시되는 간단한 예제입니다.
1단계: 새 프로젝트 생성
Android Studio에서 File → New Project를 선택하고, 새 프로젝트 생성에 필요한 정보를 모두 입력해 새 프로젝트를 만듭니다.
2단계: 레이아웃 파일 작성 (res/layout/activity_main.xml)
다음 코드를 activity_main.xml에 추가합니다. 벨소리 선택을 호출하는 버튼과, 선택된 벨소리 경로를 보여줄 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">
<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_centerHorizontal="true"
android:textStyle="bold|italic"
android:text="Ringtone Path"/>
</RelativeLayout>
3단계: 메인 액티비티 코드 작성 (src/MainActivity.java)
다음 코드를 MainActivity.java에 추가합니다. 버튼 클릭 시 RingtoneManager.ACTION_RINGTONE_PICKER 인텐트로 시스템 벨소리 선택 화면을 띄우고, 그 결과를 onActivityResult()에서 받아 처리합니다.
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;
@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) {
// 벨소리를 선택하기 위한 인텐트
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, 999);
}
});
}
@SuppressLint("SetTextI18n")
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 999 && resultCode == RESULT_OK) {
Uri uri = data.getParcelableExtra(
RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
txtView.setText("From :" + uri.getPath());
}
}
}
주요 코드 설명
- ACTION_RINGTONE_PICKER: 시스템에서 제공하는 벨소리 선택 화면을 호출하는 인텐트 액션입니다.
- EXTRA_RINGTONE_TYPE: 선택할 소리의 종류를 지정합니다. 벨소리는 TYPE_RINGTONE, 알람은 TYPE_ALARM, 알림음은 TYPE_NOTIFICATION을 사용합니다.
- EXTRA_RINGTONE_EXISTING_URI: 현재 설정된 벨소리 URI를 전달해 목록에서 현재 항목이 표시되도록 합니다.
- EXTRA_RINGTONE_SHOW_SILENT / SHOW_DEFAULT: '무음' 항목과 '기본 벨소리' 항목의 표시 여부를 결정합니다.
4단계: 매니페스트 파일 수정 (androidManifest.xml)
벨소리를 시스템 설정에 적용하려면 WRITE_SETTINGS 권한이 필요합니다. 다음 코드를 androidManifest.xml에 추가합니다.
<?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>
애플리케이션 실행하기
이제 애플리케이션을 실행해 보겠습니다. 실제 안드로이드 기기가 컴퓨터에 연결되어 있다고 가정합니다. Android Studio에서 프로젝트의 액티비티 파일 중 하나를 연 뒤 툴바의 Run 아이콘을 클릭하고, 실행 대상으로 모바일 기기를 선택하면 기기에 아래와 같은 기본 화면이 나타납니다.


추가 팁
- 선택한 벨소리를 실제 기기 벨소리로 적용하려면
RingtoneManager.setActualDefaultRingtoneUri()메서드를 함께 호출해야 합니다. - Android 6.0(API 23) 이상에서는 시스템 설정 변경 권한이 특수 권한으로 분류되므로,
Settings.System.canWrite()로 권한 여부를 확인하고 필요 시ACTION_MANAGE_WRITE_SETTINGS화면을 통해 사용자에게 허용을 요청해야 합니다.