寒川アクアブログ

美容師しながらアプリ開発していて水草が趣味の私のブログです

サウンドピッカーを呼び出して着信音等を取得する

着信音や通知音を取得できるサウンドピッカーを呼び出す方法と、その結果の受け取り方

黙示的インテントから、サウンドピッカーを呼び出します。
Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT,false);
startActivityForResult(intent,REQUEST_CODE_RINGTONE_PICKER);

(REQUEST_CODE_RINGTONE_PICKERは、任意の定数です。)

これを実行すると、サウンドピッカーが現れます。
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT,false);
このコードは、”サイレント”をリストに表示するかどうかをboolean型で指定します。
falseにすれば、リスト上に表示されません。
”サイレント”(端末によっては”設定しない”などと表示される)が選択された場合、
アクティビティリザルトのdataがnullになるので、エラー回避の記述を加える必要があります。
ユーザビリティや、開発しているアプリの用途に合わせて振舞いを選んでください。

サウンドピッカーからの結果を受け取る。
@Override
protected void onActivityResult(int requestCode,int resultCode,intent data){
	if (requestCode == REQUEST_CODE_RINGTONE_PICKER){
            if (resultCode == RESULT_OK){

                Uri uri = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
                Ringtone ringtone = RingtoneManager.getRingtone(this,uri);
            }
        }
}

onActivityResultをオーバーライドして、返り値から、目的のオブジェクトを取得していきます。
例では、着信音です。
dataからユーザーによって選択された着信音のUriを取り出し、
それを引数にRingtoneのインスタンスを取得しています。


これで、すぐにでも音を鳴らすことができます。

独自の操作性を追求するのでなければ、
データベースやカーソルを駆使するよりも、
サウンドピッカーを利用した方がはるかに簡単だと思います。

また、サウンドピッカーから、SDカード内のデータを取得できるようにする場合は、
マニフェストに、SDカードにアクセスする権限を加える必要があるのでご注意ください。