1

这是我第一次尝试制作 Android 应用程序。它是一个简单的 SMS 侦听器,然后将 SMS 显示为 Toast。

public class SmsReciever extends BroadcastReceiver {

String msgBody = null;
@Override
public void onReceive(Context context, Intent intent) {
    // TODO Auto-generated method stub
    if(intent.getAction().equals("android.provider.Telephony.SMS_RECIEVED")){
        Bundle bundle = intent.getExtras();
        SmsMessage[] msg = null;
        String msg_from;
        if(bundle != null)
        {
            try{
                Object[] pdus = (Object[]) bundle.get("pdus");
            msg = new SmsMessage[pdus.length];
            for(int i=0;i<msg.length;i++)
            {
                msg[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
                msg_from = msg[i].getOriginatingAddress();
                msgBody += msg[i].getMessageBody();
            }
            }catch(Exception e)
            {
                Log.d("Exception caught",e.getMessage());
            }
            Toast.makeText(context, msgBody, Toast.LENGTH_SHORT).show();
        }

    }
}}

我收到以下错误:

java.lang.RuntimeException: Unable to instantiate receiver com.example.droid.SmsReceiver: java.lang.ClassNotFoundException: com.example.droid.SmsReceiver

我向你保证 SmsReciever.java 在 droid/src 中。我花了整夜研究这个问题。请帮忙。

编辑:这是您要求的清单 xml 文件。

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="15" />
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<uses-permission android:name="android.permission.READ_SMS" /> 

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" android:permission="android.permission.RECEIVE_SMS">
    <activity
        android:name=".JarvisActivity"
        android:label="@string/title_activity_jarvis" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".SecureMessagesActivity" 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:exported="false" >
        <intent-filter android:priority="1000">
        <action android:name="android.provider.Telephony.SMS_RECEIVED" />
        </intent-filter>
</receiver>
</application>
</manifest>

编辑:我做了一些研究,发现在我的清单文件中我有一个指向SecureMessagesActivity的活动标签。但是在我的整个项目中,我没有那个名字的活动。那么这是问题所在吗?

编辑:好的,所以我从清单文件中删除了 SecureMessageActivity 部分,我猜它删除了错误。现在我收到了这个 Permisssion 拒绝消息:

Permission Denial: receiving Intent { act=android.provider.Telephony.SMS_RECEIVED  flg=0x10 (has extras) } to net.learn2develop.SMSMessaging requires android.permission.RECEIVE_SMS due to sender com.android.phone (uid 1001)

我还使用net.learn2develop.SMSMessaging活动试图复制另一个代码以达到相同的目的,但现在我已经删除了整个项目并多次清理了我自己的项目。这种活动仍然一次又一次地到来。 编辑 查克,我很快就会重新开始......感谢所有输入。

4

3 回答 3

1

您的 Adnroid 清单中有您的接收器吗?如果是,请同时提供 AndroidManifest.xml。您可能还想检查这些相关问题:Android - SMS Broadcast receiverAndroid SMS receiver not workingBroadcastReceiver + SMS_RECEIVED

编辑

尝试添加android:exported="true"到您的BroadcastReceiver. 这个接收器对我有用:

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

您现在android:exported="false"基本上告诉 Android 您BroadcastReceiver无法从应用程序外部的源接收消息。有关此标签的更多信息:http: //developer.android.com/guide/topics/manifest/receiver-element.html

于 2012-09-25T02:17:04.917 回答
0

尝试在清单中更改您的接收器:

<receiver android:name="com.example.droid.SmsReceiver" >
            <intent-filter>
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            </intent-filter>
</receiver>
于 2012-09-28T05:52:02.140 回答
0

我有一个可以帮助你的想法:让我们试试这个代码:

<receiver android:name="com.example.droid.SmsReceiver" 
        android:exported="true" 
        android:enabled="true">
        <intent-filter android:priority="2147483647">
            <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            <action android:name="android.provider.Telephony.GSM_SMS_RECEIVED" />
            <action android:name="android.provider.Telephony.SMS_RECEIVED2" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
        <intent-filter android:priority="2147483647">
            <action android:name="android.intent.action.DATA_SMS_RECEIVED" />
            <data android:scheme="sms" />
            <data android:host="localhost" />
        </intent-filter>
</receiver>

不同类型的设备可以使用自己的非标准动作名称。

于 2013-05-13T14:24:01.063 回答