Androidから、通話ログの情報を取得したいけど、何のパーミッションを設定したらいいの?
Androidアプリから、通話ログ(音声発信、音声着信の履歴)の情報を取得するには、コンテントプロバイダという機能を使います。
コンテントプロバイダの基本的な使い方は、ここでは説明を省きます。
通話ログの情報を取得するには、getContentResolver()というActivityクラスのメソッドで取得したContentResolverのquery()の第一引数、つまりURIに、CallLog.Calls.CONTENT_URIを指定します。
わかりにくいですが、例えば以下のような感じです。
Cursor c = getContentResolver().query(
CallLog.Calls.CONTENT_URI,
(以下の引数は省略します。)
)
これでAndroidアプリを動かすと、SecurityExceptionが発生します。
その為、パーミッションを設定しなければならない事がわかります。
で、以前紹介したパーミッションの設定方法で、該当しそうなパーミッションを探します。
しかし、、、
「CallLog」という文字が含まれているような、それっぽい名前がありません・・・。
こういうときは、ログを見てみましょう。
SecurityExceptionが発生しているログを見ると、以下のように出力されています。
java.lang.SecurityException: Permission Denial: reading com.android.providers.contacts.CallLogProvider uri content://call_log/calls from pid=xxx, uid=xxxxx requires android.permission.READ_CONTACTS
あ、そっか。
android.permission.READ_CONTACTSを設定すればいいのか!
と、わかります。
今回は、通話ログのパーミッションを例に挙げてみましたが、何のパーミッションを与えていいかわからないときは、ログに答えが書いていますので、見てみてください。
AndroidのAPIリファレンスで探すのは至難の業だと思います・・・。
No commented yet.