开发者

onReceive never getting called

开发者 https://www.devze.com 2023-02-07 14:16 出处:网络
Below is my Java code and my XML code. Can someone please tell me why my onReceieve method is never getting called.

Below is my Java code and my XML code. Can someone please tell me why my onReceieve method is never getting called.

Java:

public class PopUPSMS extends Activity {

    String RECEIVE_SMS = "RECEIVE_SMS";

    private static final String LOG_TAG = "PopUPSMS";

    static final String ACTION = "android.provider.Telephony.SMS_RECEIVED";

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Log.i(LOG_TAG, "onCreate");

        registerReceiver(new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                Log.i(LOG_TAG, "onReceive");
            }
        }, new IntentFilter(RECEIVE_SMS));
    }
}

XML:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.smith.johnathan.phone"
    android:versionCode="1"
    android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".PopUPSMS"
            android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
    <uses-permission android:name="android.permission.READ_SMS" />
    <uses-permission开发者_Python百科 android:name="android.permission.RECEIVE_SMS" />
    <uses-sdk android:minSdkVersion="3" />
</manifest> 


 registerReceiver(new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            Log.i(LOG_TAG, "onReceive");
        }
    }, new IntentFilter(RECEIVE_SMS));

You have registered your broadcast receiver with the string "RECEIVE_SMS". The IntentFilter should be of a form of an action. With your declaration:

static final String ACTION = "android.provider.Telephony.SMS_RECEIVED";

you will have:

registerReceiver(new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                Log.i(LOG_TAG, "onReceive");
            }
        }, new IntentFilter(ACTION));

You can have a look at the Api demos Manifest for the XML declaration


You can't use receiver as an inner class. Create a separate one.


Don't you need to specify that you want to receive SMS in your manifest?

<application android:icon="@drawable/icon" android:label="@string/app_name">

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

</application>
0

精彩评论

暂无评论...
验证码 换一张
取 消