听着Android的传入短信时,谷歌的Hangouts或其他应用程序接收它 [英] Listen Android incoming SMS when Google Hangout or other app receives it

查看:264
本文介绍了听着Android的传入短信时,谷歌的Hangouts或其他应用程序接收它的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想使用的广播接收器在我的应用程序读取输入的短信,也能这样做。但是,如果有人收到对谷歌的视频群聊,而不是默认的短信应用短信,广播接收器不工作。

以下是code我使用的:

 公共类SmsListener扩展广播接收器{//获取SmsManager对象
最后SmsManager短信= SmsManager.getDefault();公共无效的onReceive(上下文的背景下,意图意图){    //获取地图从意图扩展数据。
    最后的捆绑包= intent.getExtras();    尝试{        如果(捆绑!= NULL){            最终目标[] = pdusObj(对象[])bundle.get(的PDU);            的for(int i = 0; I< pdusObj.length;我++){                SmsMessage currentMessage = SmsMessage.createFromPdu((字节[])pdusObj [I]);
                串phoneNumber的= currentMessage.getDisplayOriginatingAddress();                字符串senderNum = phoneNumber的;
                字符串消息= currentMessage.getDisplayMessageBody();                Log.i(SmsReceiver,senderNum:+ senderNum +的消息:+消息);
                //显示警报
                INT持续时间= Toast.LENGTH_LONG;
                吐司面包= Toast.makeText(背景下,
                        senderNum:+ senderNum +,留言:+消息,持续时间);
                toast.show();            } //结束for循环
        } //包是空    }赶上(例外五){
        Log.e(SmsReceiver,异常smsReceiver+ E);    }
}

该清单:

 <接收机器人:名字=。SmsListener>
        &所述;意图滤光器>
            <作用机器人:名字=android.provider.Telephony.SMS_RECEIVED/>
        &所述; /意图滤光器>
    < /接收器>

权限:

 <使用许可权的android:NAME =android.permission.RECEIVE_SMS/>
<使用许可权的android:NAME =android.permission.READ_SMS/>
<使用许可权的android:NAME =android.permission.SEND_SMS/>


解决方案

您可能希望将Android的优先级值设置为一个适当的值。


  (带Context.sendOrderedBroadcast发送)

序广播节目是在一个时间传送到一个​​接收器。由于每个接收器依次执行时,它可以结果传播到下一个接收器,或者它可以完全中止该广播,以便它不会被传递给其他接收机。订单接收运行可以用机器人进行控制:匹配意图过滤器的优先级属性;具有相同优先级的接收器将在一个任意的次序来运行。


I am trying to use a broadcast receiver to read incoming SMS in my app and also able to do so. However, if someone receives SMS on google hangout instead of default SMS app, the broadcast receiver doesn't work.

The following is the code I am using:

public class SmsListener extends BroadcastReceiver {

// Get the object of SmsManager
final SmsManager sms = SmsManager.getDefault();

public void onReceive(Context context, Intent intent) {

    // Retrieves a map of extended data from the intent.
    final Bundle bundle = intent.getExtras();

    try {

        if (bundle != null) {

            final Object[] pdusObj = (Object[]) bundle.get("pdus");

            for (int i = 0; i < pdusObj.length; i++) {

                SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) pdusObj[i]);
                String phoneNumber = currentMessage.getDisplayOriginatingAddress();

                String senderNum = phoneNumber;
                String message = currentMessage.getDisplayMessageBody();

                Log.i("SmsReceiver", "senderNum: "+ senderNum + "; message: " + message);


                // Show Alert
                int duration = Toast.LENGTH_LONG;
                Toast toast = Toast.makeText(context,
                        "senderNum: "+ senderNum + ", message: " + message, duration);
                toast.show();

            } // end for loop
        } // bundle is null

    } catch (Exception e) {
        Log.e("SmsReceiver", "Exception smsReceiver" +e);

    }
}

The manifest has:

<receiver android:name=".SmsListener">
        <intent-filter>
            <action android:name="android.provider.Telephony.SMS_RECEIVED" />
        </intent-filter>
    </receiver>

Permissions:

<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.SEND_SMS" />

解决方案

You may want to set the android priority value to a suitable value.

Ordered broadcasts (sent with Context.sendOrderedBroadcast) are delivered to one receiver at a time. As each receiver executes in turn, it can propagate a result to the next receiver, or it can completely abort the broadcast so that it won't be passed to other receivers. The order receivers run in can be controlled with the android:priority attribute of the matching intent-filter; receivers with the same priority will be run in an arbitrary order.

这篇关于听着Android的传入短信时,谷歌的Hangouts或其他应用程序接收它的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆