使用模拟器发送短信出现错误的解决方法

在安卓应用开发揭秘第四章讲解使用模拟器发送短信并使用Toast显示短信息的时候,本人遇到过如下错误,现有一点个人的浅显理解:

错误:Couldn't open fd for content://settings/system/notification_sound Unable to to create media player

此错误导致Toast提示无法实现,后经过修改后依然会出现此错误,但是Toast提示信息出现了。本人个人猜测因为发短信会有短信提示声,需创建一个MediaPlayer播放声音,

但是未能打开错误提示信息上所指定的声音,所以会提示错误。也希望各位大神能指点下我的这个错误。现先讨论下Toast未能提示:

其中在书上的例子有两处缺陷,一处在SMSReceive中,一处在AndroidManifest中:

SMSReceive中,在onCreate方法之前需先定义个短信接收权限的变量SMS_RECEIVED并且赋值权限给变量,即:String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED" ;

然后在收到短信时自动触发onReceive方法时须先判断这个动作是否是接收短信的权限,即onReceive方法之前定义的短信接收权限。具体代码如下(蓝色字体为书上未有代码):

public class SMSReceiver extends BroadcastReceiver {

  String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED" ;

  public void onReceive(Context context,Intent intent){
    if (intent.getAction().equals( SMS_RECEIVED )) {
      Bundle bundle=intent.getExtras();
      Object message[]=(Object[])bundle.get("pdus");
      SmsMessage smsMessage[]=new SmsMessage[message.length];
      for (int i = 0; i < message.length; i++) {
        smsMessage[i]=SmsMessage.createFromPdu((byte[]) message[i]);
      }
      Toast toast=Toast.makeText(context, "短信内容:"+smsMessage[0].getMessageBody(), Toast.LENGTH_LONG);
      //toast.setGravity(Gravity.TOP|Gravity.LEFT, 0, 200);
      toast.show();
    }
  }
}

AndroidManifest.xml中,书中强调使用了短信接口,需要在xml文件中声明短信接口权限。但是书中只声明了接收短信权限,未声明发送短信权限。须增加发送短信权限(蓝色字体为书上未有内容),

具体代码如下:

<uses-permission android:name = "android.permission.RECEIVE_SMS" ></uses-permission>
<uses-permission android:name="android.permission.SEND_SMS"></uses-permission>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >

<activity android:name=".Activity0405"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name=".SMSReceiver" android:enabled="true">
<intent-filter >
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
</receiver>
</application>

最终效果:

 

希望此段经历能帮助到各位,各位也可以留言和我讨论。本人刚入门,也希望能得到各位安卓大神的指点。。。

posted @ 2013-04-10 23:59  朴特敏  阅读(624)  评论(0编辑  收藏  举报