老汉新学 Android开发的问题 先谢谢高手

ququer 发布于 2012/11/14 09:01
阅读 5K+
收藏 3

【Gopher China万字分享】华为云的Go语言云原生实战经验!>>>

问题一:

如下代码:

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

会有一个警报:Exported receiver does not require permission,请问怎么解决这个警告?

如果改成下面这样,那么程序运行时不会触发onReceive(Context context, Intent intent)

<receiver
 android:name=".ReceiverSMS"
 android:enabled="true"
 android:permission="android.permission.RECEIVE_SMS"
 android:exported="false">
 <intent-filter>                
  <action android:name="android.provider.Telephony.SMS_RECEIVED" />          
 </intent-filter>        
</receiver>


问题二:

看下面代码:

    @Override
    public void onReceive(Context context, Intent intent)
    {
     if (intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED"))
     {
      StringBuilder sb = new StringBuilder();
      Bundle bundle = intent.getExtras();

      if (bundle != null)
      {
                Object[] pdus = (Object[]) bundle.get("pdus");
                SmsMessage[] msgs = new SmsMessage[pdus.length];

                for (int i = 0; i < pdus.length; i++)
                {
                 msgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
                }

                for (SmsMessage s : msgs)
                {
                    sb.append(s.getDisplayOriginatingAddress());
                    sb.append(" + ");
                    sb.append(s.getDisplayMessageBody());
                }

                Toast.makeText( context,"短消息: " + sb.toString(),Toast.LENGTH_LONG).show();
         }
     }
    }

请问如何把截取到的短信息显示在UI中的TextView中。

加载中
0
q
ququer
为什么没人回答呢?帮帮忙吧
0
Arrowing
Arrowing
帮顶。。。
0
代码会说话
代码会说话

(1)你试试:

的manifest根目录下设置所需要的权限:

<uses-permission android:name="android.permission.RECEIVE_SMS" />
(2)在onReceive()方法中,

启动一个Activity来显示短信内容,

你应该知道可以使用Intent来传递短信内容吧!


0
q
ququer

第2个问题,能给点代码提示吗?谢谢

第1个问题,我已经设置了所需要的权限

0
小耶果
小耶果
看到老汉xx我进来了,看到问题我出去了...
random_walk
random_walk
我还以为能看到laohan推车呢
0
丁乾
丁乾

第二个问题是比较简单的:通过

Intent intent= new Intent(this, ****.class);

intent.putExtra(String, String);

startActivity(intent);

就可以将需要的信息传递到Avtivity中显示。


第一个问题,只是一个警告,大可不用理会它。

在SDK升级到version 20之后才会出现这个警告,在组件加了intent-filter之后会提示的安全问题,应该是说别的程序可能通过这个filter使用到你程序内容,去掉警告的方法是增加android:exported="false",但是这样的话只能自己的程序调用,现在大多数市面上有的软件,都没有理会这个警告,事实上,老的SDK根本就不会有这个提示,大多数人在开发过程中也不会随时去更新SDK。有看到过这种警告,但由于项目进度,个人对这个尚未研究。

0
老牟
老牟

2 题解决方案

1)  在Activity 里注册接收广播,能直接设置TextView

缺点是 只有启动Activity 才能收到

2)  在Activity里注册全局广播

<receiver android:name=".SMSActivity$ReceiverSMS" >
     <intent-filter>
         <action android:name="android.provider.Telephony.SMS_RECEIVED" />
     </intent-filter>
</receiver>
3) 如你所写,在 onReceive创建本地储存(数据库等),在 Activity读取。

4) onReceive结束后,发送广播,Activity接收。

0
q
ququer
谢谢大家,感谢,回头有问题,再向大家请教。
0
贺志强
贺志强
第一个问题我还的考虑,第二个问题可以用handler解决,查一下文档就知道了
返回顶部
顶部