4

TTS を使用して GTalk メッセージを読み取るアプリがあります。Google ハングアウトが GTalk に取って代わったため、ハングアウトと統合する必要があります。ハングアウトがメッセージを受信したときに呼び出されるコンテンツ オブザーバーが機能するようになりました。

getContentResolver().registerContentObserver(
            Uri.withAppendedPath(Uri
                    .parse("content://com.google.android.apps.babel.content.EsProvider/"),
                    "messages"), true, observer);

オブザーバーが呼び出されたとき

        public void onChange(final boolean selfChange) {
        if (paused) {
            Toast.makeText(application, "paused", Toast.LENGTH_LONG).show();
            return;
        }

        Cursor message = null;
        Cursor conversation = null;
        Cursor contact = null;
        //Toast.makeText(application, "getting messages", Toast.LENGTH_LONG).show();
        try {
            final String[] messageProjection = new String[] { "body",
                    "date", "type" };
            /*message = getContentResolver()
                    .query(Uri.withAppendedPath(
                            Uri.parse("content://com.google.android.providers.talk/"),
                            "messages"), messageProjection, "err_code = 0",
                            null, "date DESC");*/

            message = getContentResolver()
                    .query(Uri.withAppendedPath(
                            Uri.parse("content://com.google.android.apps.babel.content.EsProvider/"),
                            "messages"), messageProjection, "err_code = 0",
                            null, "date DESC");
            if (!message.moveToFirst()) {
                Toast.makeText(application, "no messages", Toast.LENGTH_LONG).show();
                return;
            }

許可エラーが発生します。

05-26 07:45:12.262: E/AndroidRuntime(9580): FATAL EXCEPTION: TalkThread
05-26 07:45:12.262: E/AndroidRuntime(9580): java.lang.SecurityException: Permission Denial: opening provider com.google.android.apps.babel.content.EsProvider from ProcessRecord{413dcdb8 9580:a2dp.Vol/u0a10071} (pid=9580, uid=10071) that is not exported from uid 10005
05-26 07:45:12.262: E/AndroidRuntime(9580):     at android.os.Parcel.readException(Parcel.java:1425)
05-26 07:45:12.262: E/AndroidRuntime(9580):     at android.os.Parcel.readException(Parcel.java:1379)
05-26 07:45:12.262: E/AndroidRuntime(9580):     at android.app.ActivityManagerProxy.getContentProvider(ActivityManagerNative.java:2545)
05-26 07:45:12.262: E/AndroidRuntime(9580):     at android.app.ActivityThread.acquireProvider(ActivityThread.java:4647)
05-26 07:45:12.262: E/AndroidRuntime(9580):     at android.app.ContextImpl$ApplicationContentResolver.acquireUnstableProvider(ContextImpl.java:2054)
05-26 07:45:12.262: E/AndroidRuntime(9580):     at android.content.ContentResolver.acquireUnstableProvider(ContentResolver.java:1101)
05-26 07:45:12.262: E/AndroidRuntime(9580):     at android.content.ContentResolver.query(ContentResolver.java:356)
05-26 07:45:12.262: E/AndroidRuntime(9580):     at android.content.ContentResolver.query(ContentResolver.java:315)
05-26 07:45:12.262: E/AndroidRuntime(9580):     at a2dp.Vol.service$TalkObserver.onChange(service.java:1724)

また、この許可をマニフェストに追加しようとしました:

com.google.android.apps.babel.content.EsProvider.permission.READ_ONLY

また、このようなデータとやり取りする方法を見つける方法を説明しているこのブログも見つけました。

メッセージの送信者と最新のメッセージのテキストを取得する可能性のあるすべてのメソッドを受け入れます。新しいハングアウトの Android インターフェースに関する適切なドキュメントは見つかりませんでした。これは GTalk の非常に優れた機能であり、ハングアウトでも同じ機能を利用したいと考えています。手がかり、情報、提案は大歓迎です。

4

1 に答える 1

1

最終的に、ユーザー補助サービスを使用して通知を読むことにしました。これは、ほとんどのアプリでうまく機能します。ハングアウトの場合、各送信者からの最初の未読メッセージを読み取りますが、後続のメッセージは送信者名とそれに続く「n 個の新しいメッセージ」のみを報告します。

私のプロジェクトのソース コードはここにあります: http://code.google.com/p/a2dpvolume/

主に Access.java を見てください。これは私のアプリのアクセシビリティ サービスです。このページ: http://code.google.com/p/a2dpvolume/wiki/Accessibility_Settingsは、私の使用方法を説明しています。

于 2013-12-21T12:05:07.720 に答える