0

現在、SMS アプリを開発していますが、SMS を受信できません。マニフェストの優先度を次のように変更しました

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

ブロードキャスト クラス :

public class SMSReceiver extends BroadcastReceiver {

    private final String ACTION_RECEIVE_SMS = "android.provider.Telephony.SMS_RECEIVED";
    private SmsModel newSMS;
    private static final String TAG = "SMSReceiver";

    @Override
        public void onReceive(Context mContext, Intent intent) {

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

    /**
     *  RECEPTION SMS
     */

    Bundle bundle = intent.getExtras();
    SmsMessage[] msgs = null;

    if (bundle != null) {



        Object[] pdus = (Object[]) bundle.get("pdus");
        msgs = new SmsMessage[pdus.length];

        for (int i = 0; i < pdus.length; i++) {
            msgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);

            from = msgs[i].getOriginatingAddress();
            content = msgs[i].getMessageBody().toString();
        }

        Log.d("FIRST BROADCAST RECIEVER", "##### incoming sms from : " + from);


            }


    this.context = context;
    bundle = intent.getExtras();
    if (bundle != null) {
        Object[] pdusObj = (Object[]) bundle.get("pdus");
        SmsMessage[] messages = new SmsMessage[pdusObj.length];

        // getting SMS information from Pdu.
        for (int i = 0; i < pdusObj.length; i++) {
            messages[i] = SmsMessage.createFromPdu((byte[]) pdusObj[i]);
        }

        for (SmsMessage currentMessage : messages) {

            sender = currentMessage.getDisplayOriginatingAddress();
            msg = currentMessage.getDisplayMessageBody();

            Log.d("Sender::",sender);
            Log.d("Msg::",msg); 
        }



    //

    if (intent.getAction().equals(ACTION_RECEIVE_SMS)) {

        // RECUPERE SMS
            bundle = intent.getExtras();
            Object[] pdus = (Object[]) bundle.get("pdus");

            // RECONSTRUIRE SMS
            messages = new SmsMessage[pdus.length];
            for (int i = 0; i < pdus.length; i++) {
                messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
            }

            if (messages.length > -1) {

                // AFFECTE NUM_TEL + MSG + THREAD_ID
                final String messageBody = messages[0].getMessageBody();
                final String phoneNumber = messages[0]
                        .getDisplayOriginatingAddress();
                int thread_id = ConversionFactory.getThreadIDfromNumber(phoneNumber);

                // AJOUT SMS DANS BOITE DE RECEPTION ANDROID + RECUPERATION NOUVEAU ID SMS
                ContentValues values = new ContentValues();
                values.put("address", phoneNumber);
                values.put("body", messageBody);
                Uri uri = mContext.getContentResolver().insert(Uri.parse("content://sms/inbox"), values);

                // SI LA THREAD EXISTE...
                if(thread_id != -1)
                {
                    // CREATION NOUVEAU SMS
                    newSMS = new SmsModel(Integer.parseInt(uri.getLastPathSegment()), thread_id, messageBody, phoneNumber, 0, System.currentTimeMillis(), "receieved");

                    // AJOUTE DANS LA CONVERSATION

                    AllConversations.getInstance().getConversation(thread_id).ListeSms.put(String.valueOf(Integer.parseInt(uri.getLastPathSegment())), newSMS);

                    // SI L'UTILISATEUR EST DANS LA CONVERSATION(ACTIVTY) DU NOUVEAU SMS
                    if(thread_id == ((VariablesService)mContext.getApplicationContext()).mScheduleMessage.getItem(0).getThreadId())
                    {                           
                        // AJOUT DANS LISTVIEW MESSAGE
                        ((VariablesService)mContext.getApplicationContext()).mScheduleMessage.add(newSMS);



                    }
                    for (int i=0; i<((VariablesService)mContext.getApplicationContext()).mScheduleConversation.getCount();i++) {

                        if (((VariablesService)mContext.getApplicationContext()).mScheduleConversation.getItem(i).getThreadId() == thread_id)
                        {
                                ((VariablesService)mContext.getApplicationContext()).mScheduleConversation.remove(((VariablesService)mContext.getApplicationContext()).mScheduleConversation.getItem(i));
                                newSMS.setContactName(mContext, newSMS.getNumber());
                                ((VariablesService)mContext.getApplicationContext()).mScheduleConversation.insert(newSMS, 0);
                                Log.i("ENTRER", ((VariablesService)mContext.getApplicationContext()).mScheduleConversation.getItem(i).getMessage());                                
                        }
                    }

                    // ENVOYER BROADCAST
                    Intent returnintent=new Intent("RECIEVE_INTENT_FROM_BROADCAST");
                    mContext.sendBroadcast(returnintent);

                    Log.i(TAG, newSMS.toString());
                }

                //VIBRATOR
                Vibrator v;
                v=(Vibrator)mContext.getSystemService(Context.VIBRATOR_SERVICE);
                v.vibrate(1000);


}

XML

    <receiver
        android:name="com.application.reciever.SMSReceiver"
        class="com.application.reciever.SMSReceiver" android:exported="true">
        <intent-filter android:priority="999" >
            <action android:name="android.provider.Telephony.SMS_RECEIVED" />
        </intent-filter>
    </receiver>

ログキャット:

11-17 11:49:08.570: I/MESSAGE(25588): Sending SMS !
11-17 11:49:08.590: I/ConversationActivity(25588): SMS Sent.
11-17 11:49:10.820: I/bcsms(25588): 3424 - 46 - tts - +33610030697 - 17-11-2012 - 1353149350823 - receieved
11-17 11:49:10.830: I/BROADCAST(25588): GOT THE INTENT
11-17 11:49:11.570: D/OpenGLRenderer(25588): Flushing caches (mode 1)
11-17 11:49:12.330: W/IInputConnectionWrapper(25588): showStatusIcon on inactive InputConnection
11-17 11:49:14.940: D/dalvikvm(25588): GC_CONCURRENT freed 293K, 8% free 8141K/8775K, paused 2ms+8ms


11-17 11:49:18.670: I/MESSAGE(25588): Sending SMS !
11-17 11:49:18.680: I/ConversationActivity(25588): SMS Sent.
11-17 11:49:21.860: D/OpenGLRenderer(25588): Flushing caches (mode 1)
11-17 11:49:22.120: W/IInputConnectionWrapper(25588): showStatusIcon on inactive InputConnection

ご覧のとおり、受信機で 2 番目の SMS を受信して​​いません。何かアイデアはありますか?

4

4 に答える 4

1

私はSMSベースのアプリにも取り組んでいます...問題はありません...非常にうまく機能しています。ここにマニフェストコードがあります:

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

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
</receiver>

SMSReceiver.class ファイルで作業する一般的な方法は次のとおりです。

public void onReceive(Context context, Intent intent) {

    this.context = context;
    Bundle bundle = intent.getExtras();
    if (bundle != null) {
        Object[] pdusObj = (Object[]) bundle.get("pdus");
        SmsMessage[] messages = new SmsMessage[pdusObj.length];

        // getting SMS information from Pdu.
        for (int i = 0; i < pdusObj.length; i++) {
            messages[i] = SmsMessage.createFromPdu((byte[]) pdusObj[i]);
        }

        for (SmsMessage currentMessage : messages) {

            sender = currentMessage.getDisplayOriginatingAddress();
            msg = currentMessage.getDisplayMessageBody();

            Log.d("Sender::",sender);
            Log.d("Msg::",msg);
        }
}
于 2012-11-27T05:38:50.527 に答える
0

これを試して..

あなたのSMSブロードキャストレシーバーの中に..

@Override
    public void onReceive(final Context context, Intent intent) {

        Bundle bundle = intent.getExtras();
        SmsMessage[] msgs = null;

        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]);

                from = msgs[i].getOriginatingAddress();
                content = msgs[i].getMessageBody().toString();
            }

            Log.d(Constants.TAG, "##### incoming sms from : " + from);

            smsContent = "SMS received From: " + from + "\n Time: "
                    + Utils.getReadableTime(System.currentTimeMillis())
                    + "\n Content: " + content;
                }

}

于 2012-11-22T13:53:55.510 に答える
0

Sms Go アプリは常に背面で実行されています。アプリで SMS も取得する場合は、1- 最も優先度の高いものを選択する 2- バックグラウンドで実行されているサービスからブロードキャスト レシーバーを実行する

于 2015-06-19T11:37:43.773 に答える
0

優先度の値は整数でなければなりません。デフォルト値は 0 です。値は -1000 より大きく、1000 未満でなければなりません。

優先度の値を 999 に設定します。コードで機能します。そして最高値です。

于 2015-04-23T12:49:39.077 に答える