1

VoicemailContract を使用しようとしていますが、マニフェストに許可を含めているにもかかわらず、許可エラーが発生し続けます。何が起こっているのか、誰かが光を当てることができますか?

ボイスメール プロバイダーにアクセスしようとすると、次のエラーが表示されます。

java.lang.SecurityException: Permission denied for URI: content://com.android.voicemail/voicemail?source_package=com.google.android.apps.googlevoice
Requires com.android.voicemail.permission.READ_WRITE_ALL_VOICEMAIL permission.

マニフェストに次の両方のアクセス許可を追加しました。

<uses-permission android:name="com.android.voicemail.permission.ADD_VOICEMAIL" />
<uses-permission android:name="com.android.voicemail.permission.READ_WRITE_ALL_VOICEMAIL" />

また、次のブロードキャスト インテントも得られません。

<receiver
    android:name=".VoicemailReceiver"
    android:exported="true" > 
    <intent-filter> 
        <action android:name="android.intent.action.NEW_VOICEMAIL" />
    </intent-filter> 
</receiver>

どんな助けでも大歓迎です。ありがとう!

4

2 に答える 2

4

再び自分の質問に答えるようです。VoicemailContract の Google ドキュメントには含まれていない、この小さな情報を見つけました。

http://developer.android.com/about/versions/android-4.0.html (「ボイスメール プロバイダー」までスクロールします)

ボイスメール プロバイダー

新しい Voicemail Provider を使用すると、アプリケーションはボイスメールをデバイスに追加して、すべてのユーザーのボイスメールを 1 つの視覚的プレゼンテーションで表示できます。たとえば、ユーザーが複数のボイスメール ソースを持っている可能性があります。1 つは電話のサービス プロバイダーからのもので、もう 1 つは VoIP またはその他の代替音声サービスからのものです。これらのアプリは、ボイスメール プロバイダー API を使用して、ボイスメールをデバイスに追加できます。組み込みの電話アプリケーションは、すべてのボイスメールを統一されたプレゼンテーションでユーザーに表示します。システムの電話アプリケーションはすべてのボイスメールを読み取ることができる唯一のアプリケーションですが、ボイスメールを提供する各アプリケーションは、システムに追加されたものを読み取ることができます (ただし、他のサービスからのボイスメールを読み取ることはできません)。

API は現在、サードパーティ アプリがシステムからすべてのボイスメールを読み取ることを許可していないため、ボイスメール API を使用する必要があるサードパーティ アプリは、ボイスメールをユーザーに配信するアプリのみです。

VoicemailContract クラスは、Voicemail Provider のコンテンツ プロバイダーを定義します。サブクラス VoicemailContract.Voicemails と VoicemailContract.Status は、デバイスに保存するボイスメール データをアプリが挿入できるテーブルを提供します。ボイスメール プロバイダー アプリの例については、ボイスメール プロバイダーのデモを参照してください。

つまり...基本的に、彼らがこの新しい API (クールで便利) を持っていても、アプリが DB に挿入したボイスメールにしかアクセスできません。デバイスにある他のボイスメールにはアクセスできません。

ブロードキャスト インテントをデバイス上のすべてのアプリに対して起動する必要があるのか​​、それともシステム アプリのみに対して起動する必要があるのか​​はまだわかりませんが、このブロードキャストを受信して​​いないため、システム アプリ専用であるとしか考えられません。 .

この情報を肯定または否定してください。ありがとう!

于 2012-07-31T17:18:30.840 に答える
0

プロジェクトのパッケージ名、つまり「content://com.android.voicemail/voicemail?source_package="+ ctx.getPackageName();」を追加する必要があると思います。

于 2012-11-27T00:07:20.963 に答える