1

これは、Android アプリを作成する最初の試みです。これは、SMS をトーストとして表示する単純な SMS リスナーです。

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 にあることを保証します。私はこの問題について一晩中調査しました。助けてください。

編集: これは、u が要求したマニフェスト 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 部分を削除したので、エラーが削除されたと思います。今、私はこの許可拒否メッセージを受け取っています:

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アクティビティが使用されましたが、今ではプロジェクト全体を削除し、自分のプロジェクトを何度もクリーンアップしました。それでも、この活動は何度も何度も来ています。 edit Chuck it すぐに最初からやり直します... すべての情報をありがとう。

4

3 に答える 3

1

Adnroid マニフェストに受信機がありますか? はいの場合は、AndroidManifest.xml も提供してください。次の関連する質問を確認することもできます: Android - SMS ブロードキャスト レシーバーAndroid SMS レシーバーが動作しないBroadcastReceiver + 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"で基本的にBroadcastReceiver、アプリケーションの外部のソースからメッセージを受信できないことを Android に伝えることができました。このタグについて詳しくは、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 に答える