使用Android阅读Google Hangouts消息

时间:2013-05-26 15:22:38

标签: android hangout

我有app使用TTS读取GTalk消息。 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

我还发现this blog描述了一种寻找与这样的数据接口的方法。

我对可能获取最新邮件的邮件发件人和文本的任何方法持开放态度。我没有在新的环聊的Android界面上找到任何好的文档。这是GTalk的一个非常好的功能,我希望通过环聊获得相同的功能。任何线索,信息,建议都非常感激。

1 个答案:

答案 0 :(得分:1)

我最终决定使用辅助功能服务阅读通知。这适用于大多数应用程序非常好。对于环聊,它会从每个发件人处读取第一封未读邮件,但后续邮件只会报告发件人名称,后跟“n条新邮件”。

我的项目的源代码在这里:http://code.google.com/p/a2dpvolume/

主要看看Access.java。这是我的应用的辅助功能服务。这个页面:http://code.google.com/p/a2dpvolume/wiki/Accessibility_Settings解释了我的使用方式。