短信广播接收器没有得到的TextMessage接收器、短信、TextMessage

2023-09-13 01:43:44 作者:你列表最软的妹

我所做

您好,大家好,我创建的那一刻短信广播接收器,我只是建造一起来学习本教程:的 Broadcasttutorial 。之后,我做了code,我更新了我的清单。从那以后,我发短信从我的其他电话到我的手机,但它没有工作。我没有得到任何输出。

问题

什么我需要改变,我可以接收这些短信。请给我一个详细的anwser,我可以学习它,一个很好的教程也将是巨大的!

code

SMSBroadcastReceiver(是包.services)

 包de.retowaelchli.filterit.services;

进口de.retowaelchli.filterit.R;
进口android.app.Notification;
进口android.app.NotificationManager;
进口android.app.PendingIntent;
进口android.content.BroadcastReceiver;
进口android.content.Context;
进口android.content.Intent;
进口android.os.Bundle;
进口android.telephony.SmsMessage;
进口android.util.Log;
进口android.widget.Toast;


公共类SmileySmsReceiver扩展的BroadcastReceiver {

    @覆盖
    公共无效的onReceive(上下文的背景下,意图意图)
    {
        // ---得到通过短信---
        Log.d(SmileySmsReceiver,是的,它调用的onReceive);
        捆绑包= intent.getExtras();
        SmsMessage []封邮件= NULL;
        字符串str =;
        如果(捆绑!= NULL)
        {
            // ---检索收到的短信---
            [对象]的PDU =(对象[])bundle.get(的PDU);
            封邮件=新SmsMessage [pdus.length]
            的for(int i = 0; I< msgs.length;我++){
                封邮件[I] = SmsMessage.createFromPdu((字节[])的PDU [I]);
                STR + =短信来自+封邮件[I] .getOriginatingAddress();
                STR + =;
                STR + =封邮件[I] .getMessageBody()的toString()。
                STR + =\ N的;
            }
            // ---显示新短信---
            Toast.makeText(背景下,海峡,Toast.LENGTH_SHORT).show();
        }
    }
}
 

这是我的Andr​​oidManifest.xml:

 < XML版本=1.0编码=UTF-8&GT?;
<舱单的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
      包=de.retowaelchli.filterit
      安卓版code =1
      机器人:VERSIONNAME =1.0>
    <使用-SDK安卓的minSdkVersion =10/>

    <! - 用户权限 - >
    <使用-权限的Andr​​oid:名称=android.permission.RECEIVE_SMS>< /使用-许可>

    <应用机器人:图标=@可绘制/图标
                 机器人:标签=@字符串/ APP_NAME
                 机器人:可调试=真
                 机器人:screenOrientation =传感器
                 机器人:主题=@风格/ FilterIt.Theme>

        <活动机器人:名称=。SplashScreenActivity
                  机器人:标签=@字符串/ APP_NAME>

            <意向滤光器>
                <作用机器人:名称=android.intent.action.MAIN/>
                <类机器人:名称=android.intent.category.LAUNCHER/>
            &所述; /意图滤光器>
        < /活性GT;

     <! - 接收器 - >
        <接收器的Andr​​oid版本:NAME =de.retowaelchli.filterit.services.SmileySmsReceiver机器人:启用=真正的>
            <意向滤光器>
                <作用机器人:名称=android.provider.Telephony.SMS_RECEIVED/>
            &所述; /意图滤光器>
        < /接收器>



        &所述;! -  Startseite  - >
        <活动机器人:名称=。StartseiteActivity>< /活性GT;

        <! - 冯Startseite ausgehende Activitys  - >
        <活动机器人:名称=。SmileyActivity>< /活性GT;
        <活动机器人:名称=。ADeleteActivity>< /活性GT;
        <活动机器人:名称=。StatsActivity>< /活性GT;
        <活动机器人:名称=。HelpMenuActivity>< /活性GT;


        <! - 冯统计ausgehende Activitys  - >
        <活动机器人:stats.ADFilterStatsNAME =>< /活性GT;
        <活动机器人:stats.SFilterStatsNAME =>< /活性GT;
        <活动机器人:stats.CreatedADFiltersNAME =>< /活性GT;
        <活动机器人:stats.CreatedSFiltersNAME =>< /活性GT;

        <! - 冯ADeleteActivity ausgehende Activitys  - >
        <活动机器人:名称=。ADFilterConfigActivity>< /活性GT;

        <! - 冯SmileyActivity ausgehende Activitys  - >
        <活动机器人:名称=。SFilterConfigActivity>< /活性GT;

    < /用途>
< /舱单>
 
短信qunfaqi Group message sender iPhone游戏 软件讨论区 威锋论坛 威锋网

解决方案

<使用-权限的Andr​​oid:名称=android.permission.RECEIVE_SMS/> 外面的<应用> 标签:

 < XML版本=1.0编码=UTF-8&GT?;
<舱单的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
      包=de.retowaelchli.filterit
      安卓版code =1
      机器人:VERSIONNAME =1.0>
    <使用-SDK安卓的minSdkVersion =10/>

    <使用-权限的Andr​​oid:名称=android.permission.RECEIVE_SMS/>

    <应用机器人:图标=@可绘制/图标
                 机器人:标签=@字符串/ APP_NAME
                 机器人:可调试=真
                 机器人:screenOrientation =传感器
                 机器人:主题=@风格/ FilterIt.Theme>

    <! - 接收器 - >
        <接收器的Andr​​oid版本:NAME =de.retowaelchli.filterit.services.SmileySMSBroadcastReceiver>
            <意图过滤器的Andr​​oid版本:优先=999>
                <作用机器人:名称=android.provider.Telephony.SMS_RECEIVED/>
            &所述; /意图滤光器>
        < /接收器>
       ...
       ...
    < /用途>
< /舱单>
 

更新

原来,@safari使用Handcent短信对他的手机应用程序,它会拦截传入的短信(这是可能的,因为 SMS_RECEIVED 是一个有序的广播,并可以通过高被取消优先广播接收器,请参阅to这个线程了解详细信息)。 为了克服这一问题,人们会需要安装广播接收器的优先级高于Handcent短信。 @safari允许使用在Android应用程序的优先级最高为 999 ,并为他工作。 要指定广播接收器的优先级添加安卓优先属性对应的<意向滤光器> 项目:

 <接收器的Andr​​oid版本:NAME =YourSmsBroadcastReceiver>
    <意图过滤器的Andr​​oid版本:优先=999>
        <作用机器人:名称=android.provider.Telephony.SMS_RECEIVED/>
    &所述; /意图滤光器>
< /接收器>
 

What I've done

Hello Guys, I'm creating at the moment a SMS Broadcast Receiver, i just builded one up with this tutorial: Broadcasttutorial. After I did the code, I updated my Manifest. After that I sent sms from my other Phone to my Phone, but It didn't work. I didn't get any output.

Question

What do I need to change, that I can receive those SMS. Please gimme a detailed anwser that I can learn it, a good tutorial would also be great!

Code

SMSBroadcastReceiver (is in package .services)

package de.retowaelchli.filterit.services;

import de.retowaelchli.filterit.R;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.util.Log;
import android.widget.Toast;


public class SmileySmsReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) 
    {
        //---get the SMS message passed in---
        Log.d("SmileySmsReceiver", "Yes it calls the onReceive");
        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();
        }                         
    }
}

This is my AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="de.retowaelchli.filterit"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-sdk android:minSdkVersion="10" />

    <!--  User Permission -->
    <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>  

    <application android:icon="@drawable/icon"
                 android:label="@string/app_name"
                 android:debuggable="true"
                 android:screenOrientation="sensor"
                 android:theme="@style/FilterIt.Theme"> 

        <activity android:name=".SplashScreenActivity"
                  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 -->
        <receiver android:name="de.retowaelchli.filterit.services.SmileySmsReceiver" android:enabled="true"> 
            <intent-filter> 
                <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
            </intent-filter> 
        </receiver>     



        <!--  Startseite -->
        <activity android:name=".StartseiteActivity"></activity>

        <!-- Von Startseite ausgehende Activitys -->   
        <activity android:name=".SmileyActivity"></activity>
        <activity android:name=".ADeleteActivity"></activity>
        <activity android:name=".StatsActivity"></activity>
        <activity android:name=".HelpMenuActivity"></activity>


        <!-- Von Stats ausgehende Activitys -->
        <activity android:name=".stats.ADFilterStats"></activity>
        <activity android:name=".stats.SFilterStats"></activity>
        <activity android:name=".stats.CreatedADFilters"></activity>
        <activity android:name=".stats.CreatedSFilters"></activity>

        <!-- Von ADeleteActivity ausgehende Activitys -->
        <activity android:name=".ADFilterConfigActivity"></activity>

        <!--  Von SmileyActivity ausgehende Activitys -->
        <activity android:name=".SFilterConfigActivity"></activity>

    </application>
</manifest>

解决方案

Put <uses-permission android:name="android.permission.RECEIVE_SMS" /> outside of the <application> tag:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="de.retowaelchli.filterit"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-sdk android:minSdkVersion="10" />

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

    <application android:icon="@drawable/icon"
                 android:label="@string/app_name"
                 android:debuggable="true"
                 android:screenOrientation="sensor"
                 android:theme="@style/FilterIt.Theme"> 

    <!-- Receiver -->
        <receiver android:name="de.retowaelchli.filterit.services.SmileySMSBroadcastReceiver"> 
            <intent-filter android:priority="999"> 
                <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
            </intent-filter> 
        </receiver>
       …
       …
    </application>
</manifest>

UPDATE

Turned out that @safari uses "Handcent SMS" application on his phone which intercepts incoming SMS (this is possible because SMS_RECEIVED is an ordered broadcast and can be canceled by high priority broadcast receivers, refer to this thread for details). To bypass this issue one would need to install broadcast receiver with higher priority than "Handcent SMS". @safari used the highest priority allowed for applications in Android: 999, and it worked for him. To specify priority of broadcast receiver add android:priority attribute to corresponding <intent-filter> item:

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