1

こんにちは皆さん、本当に重要な質問があります。助けてください。受信メッセージをbroadcastReceiverで処理しようとしていますが、うまくいきません。以下のコードを送信してください。助けてください。

私のマニフェスト:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.commonsware.andorid"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="8" />
    <uses-permission android:name="android.permission.INTERNET"/>
      <uses-permission android:name="android.permission.READ_CONTACTS" />

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



    <application
        android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
         <receiver android:name=".SMSBroadcastReceiver">
           <intent-filter android:priority="999">
                <action android:name="android.provider.Telephony.SMS_RECEIVED"></action>
            </intent-filter>
        </receiver>
        <activity
            android:name=".NewPage"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".NewMessage" />
        <activity android:name=".SignFrame"></activity>
        <activity android:name=".MyMenu"></activity>
        <activity android:name=".Detail"></activity>
        <activity android:name=".Browser"></activity>
        <activity android:name=".Login"></activity>
        <activity android:name=".UserDetail"></activity>
        <activity android:name=".AndroidAppActivity"></activity>
    </application>

</manifest>




My Class:


package com.commonsware.andorid;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.acl.Owner;
import java.util.StringTokenizer;

import javax.crypto.BadPaddingException;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract.PhoneLookup;
import android.telephony.SmsMessage;

import android.util.Log;
import android.widget.Toast;

public class SMSBroadcastReceiver extends BroadcastReceiver {




        private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
        private static final String TAG = "SMSBroadcastReceiver";
        RSA rsa;
        DataBaseHelper db;
        @Override
        public void onReceive(Context context, Intent intent) {
            try {
                rsa=new RSA();
            } catch (InvalidKeyException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            } catch (NoSuchAlgorithmException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            } catch (IllegalBlockSizeException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            } catch (NoSuchProviderException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            } catch (BadPaddingException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            } catch (NoSuchPaddingException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            } catch (FileNotFoundException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            } catch (IOException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
             Log.i(TAG, "Intent recieved: " + intent.getAction());

             if (intent.getAction().equals(SMS_RECEIVED)) {
                abortBroadcast();
                    Bundle bundle = intent.getExtras();
                    if (bundle != null) {
                        Object[] pdus = (Object[])bundle.get("pdus");
                        final SmsMessage[] messages = new SmsMessage[pdus.length];
                        for (int i = 0; i < pdus.length; i++) {
                            messages[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
                        }
                        if (messages.length > -1) {
                            abortBroadcast();
                            Toast toast =Toast.makeText(context, messages.toString(), Toast.LENGTH_LONG);
                            String body = messages[0].getMessageBody().toString();
                            String address = messages[0].getOriginatingAddress();
                            System.out.println(address);
                            String decrypted = null;

                            toast.show();
                            Intent i = new Intent(context, Detail.class);
                            i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                            context.startActivity(i); 
                            try {
                                decrypted=rsa.decrypt(body.getBytes());

                            } catch (InvalidKeyException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            } catch (IllegalBlockSizeException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            } catch (BadPaddingException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            } catch (NoSuchAlgorithmException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            } catch (NoSuchPaddingException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            } catch (IOException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }

                            Log.i(TAG, "Message recieved: " + messages[0].getMessageBody());
                            if(body.startsWith("<publicKey>")){
                                createContact(messages[0]);

                            }
                            else if(body.startsWith("<secureSmsMessaging>")){
                            createMessage(messages[0]);
                            }
                            messages[0].getMessageBody().replaceAll(body, decrypted);


                        }
                    }
                }

                this.abortBroadcast();
           }
}

私はそれをデバッグしようとしました.しかし、それは私のブロードキャストレシーバーに入りません.メッセージを送信するたびに、Androidのデフォルトのメッセージングサービスがそれを処理します.何が間違っていますか?

私はあなたの答えを待っています。ありがとう。

セビル。

4

2 に答える 2

2

httpsサーバーを使用して問題を解決しました.私の問題は、ユーザーの公開鍵と暗号化されたメッセージを送信するときに、バイト配列を含む文字列をバイト配列に変換することでした.現在、httpsサーバーを使用してスタッフを書き込んでから読み取ります.より経済的になりました.多くの問題に遭遇する可能性があるため、メッセージングで暗号化を提供したいすべての人にhttpsサーバーを使用することをお勧めします.

于 2012-06-10T01:03:38.563 に答える
2

@ onReceive メソッドが間違っていると思います。

Broadcast Receiverを使用して着信メッセージを聞くための小さなアプリを作成しました。

SMSBroadcastReceiver.java

public class SMSBroadcastReceiver extends BroadcastReceiver{

@Override
public void onReceive(Context context, Intent intent) {
    // TODO Auto-generated method stub
    Bundle bundle = intent.getExtras();
    SmsMessage[] msgs = null;
    String str = "";
    if(bundle != null){

        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 Phone No: " +msgs[i].getOriginatingAddress();
            str +="\n"+"Message is: ";
            str += msgs[i].getMessageBody().toString();
            str +="\n";
        }

        Log.v("Debug", str);
        Toast.makeText(context, str, Toast.LENGTH_SHORT).show();
    }
}}

AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.rdc"
  android:versionCode="1"
  android:versionName="1.0">
<uses-sdk android:minSdkVersion="8" />

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

<application android:icon="@drawable/icon" android:label="@string/app_name">
    <receiver android:name=".SMSBroadcastReceiver">
        <intent-filter>
            <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
        </intent-filter>
    </receiver>

</application></manifest>

これをチェックして、コードに実装できます!!

于 2012-05-18T08:50:50.653 に答える