在Android Manifest.xml中接收SMS

时间:2012-12-15 09:10:49

标签: java android xml sms

我尝试在我的应用中收到短信,我确定问题出在我的AndroidManifest.xml文件中

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.amin_amini.smstestmobi"
      android:versionCode="1"
      android:versionName="1.0.0">
    <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="15" />
    <uses-permission android:name="android.permission.RECEIVE_SMS"/>
    <uses-permission android:name="android.permission.SEND_SMS"/>
    <uses-permission android:name="android.permission.READ_SMS"/>
    <application android:icon="@drawable/ic_launcher" android:label="@string/app_name">
        <activity android:name=".SMS"
                  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"
                  android:exported="true"
                  android:permission="android.permission.BROADCAST_SMS"> 
            <intent-filter android:priority="1000"> 
                <action android:name="android.provider.Telephony.SMS_RECEIVED"/> 
            </intent-filter> 
        </receiver> 
    </application>
</manifest>

我的SmsReceive.java就像这样

package com.amin_amini.smstestmobi;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.widget.Toast;

public class SmsReceiver extends BroadcastReceiver
{   
    @Override
    public void onReceive(Context context, Intent intent) 
    {
    //---get the SMS message passed in---
    Bundle bundle = intent.getExtras();        
    SmsMessage[] msgs = null;
    String str = "";            
    if (bundle != null)
    {
        //---retrieve the SMS message received---
        Object[] pdus = (Object[]) bundle.get("pdus");
        msgs = new SmsMessage[pdus.length];            
        for (int i=0; i<msgs.length; i++)
         {
            msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);                
            str += "SMS from " + msgs[i].getOriginatingAddress();                     
            str += " :";
            str += msgs[i].getMessageBody().toString();
            str += "\n";
        }
        //---display the new SMS message---
        Toast.makeText(context, str, Toast.LENGTH_SHORT).show();
    }                   
    Toast.makeText(context, "Hey", Toast.LENGTH_SHORT).show();
    }
}

我确定我的问题出在manifest.xml中,因为

 Toast.makeText(context, "Hey", Toast.LENGTH_SHORT).show();

不显示任何内容 我该怎么办?

编辑: 正如我们的朋友所说的那样,我用了

    Log.i("Hey","Hey" );

在我的函数中,但LogCat中不会显示任何内容 所以我不确定我的问题在于AndroidManifest.xml 注意:我在HTC Sensation上使用android 4.0.3

2 个答案:

答案 0 :(得分:4)

将您的接收器代码更改为,它会帮助您,如果它仍然不起作用,那么您可能已经安装了另一个具有更高优先级的SMS应用程序,并将支持广播服务。

     <receiver android:name=".SmsReceiver"> 
        <intent-filter android:priority="1000">
            <action android:name="android.intent.action.PHONE_STATE" />
            <action android:name="PACKAGE_NAME.android.action.broadcast"/> 
             <action android:name="android.provider.Telephony.SMS_RECEIVED"></action>
        </intent-filter> 
    </receiver>

答案 1 :(得分:0)

是的,您的代码在这里工作正常。

这是我的androidmanifest

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

我添加了这些权限

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

或下载此code ..我已经做到了这一点。它在对话框中接收短信和节目。