Чтение сообщений Google Hangouts с помощью Android

У меня есть приложение, которое считывает сообщения GTalk, используя TTS. Google Hangouts заменил GTalk, так что теперь мне нужно интегрироваться с Hangouts. Наконец-то у меня работает обозреватель контента, который вызывается, когда Hangouts получает сообщение.

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 с новыми Hangouts. Это была очень хорошая функция в GTalk, и я хотел бы получить такую ​​же функциональность в Hangouts. Любые подсказки, информация, предложения с благодарностью.

1 ответ

Я, наконец, решил прочитать уведомления с помощью службы специальных возможностей. Это работает для большинства приложений довольно хорошо. Для Hangouts он читает первое непрочитанное сообщение от каждого отправителя, но последующие сообщения будут сообщать только имя отправителя, за которым следует "n новых сообщений".

Исходный код моего проекта находится здесь: http://code.google.com/p/a2dpvolume/

Посмотрите на Access.java в основном. Это сервис специальных возможностей для моего приложения. На этой странице: http://code.google.com/p/a2dpvolume/wiki/Accessibility_Settings объясняется, как мой пользователь использует это.

Другие вопросы по тегам