使用模拟器发送短信出现错误的解决方法
在安卓应用开发揭秘第四章讲解使用模拟器发送短信并使用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>
最终效果:
希望此段经历能帮助到各位,各位也可以留言和我讨论。本人刚入门,也希望能得到各位安卓大神的指点。。。