SMS Broadcast Receiver not working

送分小仙女□ 提交于 2019-12-02 11:45:38

问题


Alright, I have tried every solution on Stack and nothing works.My current method registers the "SmsListener" receiver from the MainActivity. All I'm trying to do is initialize the onReceive method. There are no errors; It simply isn't picking up a broadcast. What am I doing wrong? Pasting the applicable code here. Anything else that may be needed please just ask.

Update: Here is a similar unresolved issue Listen Android incoming SMS when Google Hangout or other app receives it I am testing under Android 6.0.1. Target Sdk version is 22. Min Sdk is 19. It's worth noting that I just tested my original code on an LG Optimus GPro with Android 4.4.2 and it worked. It still isn't working on my Nexus with Android 6.0.1.

Manifest:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.biapps.makin_biscuits">
<uses-sdk android:minSdkVersion="4" />

<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"/>
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.WRITE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">

    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <action `android:name="android.service.notification.NotificationListenerService" />`
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity android:name=".ContactsList">
        <intent-filter>
            <category android:name="android.intent.category.ALTERNATIVE" />
        </intent-filter>
    </activity>

    <receiver
        android:name=".SmsListener"
        android:priority="999"
        android:enabled="true"
        android:exported="true">

    </receiver>

    <receiver
        android:name=".IncomingCallReceiver"
        android:enabled="true"
        android:exported="true">

    </receiver>


</application>

Main Activity

    package com.biapps.makin_biscuits;

    import android.service.notification.NotificationListenerService;
    import android.app.NotificationManager;

    import android.content.Context;

    import android.content.IntentFilter;
    import android.media.AudioManager;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.content.Intent;

    import android.view.View;
    import android.widget.ImageButton;

    import android.widget.Toast;


public class MainActivity extends AppCompatActivity {
    //set object labels and states here
    private ImageButton icon;
    private AudioManager am;
    private ImageButton people;
    private ImageButton ring;
    private NotificationManager nm;
    private NotificationListenerService nls;
    IncomingCallReceiver broadCastReceiver = new IncomingCallReceiver();
    SmsListener smsReceiver = new SmsListener();
    @Override

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);

        icon = (ImageButton) findViewById(R.id.icon);
        icon.setOnClickListener(imgButtonHandler);
        people = (ImageButton) findViewById(R.id.people);
        //people.setOnClickListener(peopleButtonHandler);
        ring = (ImageButton) findViewById(R.id.ring);

    }

    int buttonstate = 0;
    public View.OnClickListener imgButtonHandler = new View.OnClickListener() {

        public void onClick(View v) {
            if (buttonstate == 0) {

                icon.setImageResource(R.drawable.buttonup);
                buttonstate = 1;
                am.setRingerMode(0);

                registerReceiver(broadCastReceiver, new IntentFilter(
                        "android.intent.action.PHONE_STATE"));
                registerReceiver(smsReceiver, new IntentFilter(
                        "android.intent.action.DATA_SMS_RECEIVED"));
                registerReceiver(smsReceiver, new IntentFilter(
                        "android.provider.Telephony.SMS_RECEIVED"));
                registerReceiver(smsReceiver, new IntentFilter(
                        "android.provider.Telephony.DATA_SMS_RECEIVED"));
                Toast.makeText(getApplicationContext(),"Diving!", `Toast.LENGTH_SHORT)`
                        .show();

            } else {

                icon.setImageResource(R.drawable.button);
                buttonstate = 0;
                am.setRingerMode(2);

                unregisterReceiver(broadCastReceiver);
                unregisterReceiver(smsReceiver);
                Toast.makeText(getApplicationContext(),"Surfacing!", Toast.LENGTH_SHORT)
                        .show();
            }
        }
    };}

SmsListener

package com.biapps.makin_biscuits;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.provider.Telephony;
import android.telephony.SmsMessage;
import android.util.Log;
import android.widget.Toast;
import android.telephony.TelephonyManager;


public class SmsListener extends BroadcastReceiver {

private static final String TAG = "SmsListener";

public static final String SMS_BUNDLE = "pdus";
@Override
public void onReceive(Context context, Intent intent) {
    Toast.makeText(context, "ON SMS RECEIVE BROADCAST", Toast.LENGTH_LONG).show();
    Log.i(TAG, "SmsListener - onReceiveCalled");

}}

回答1:


Try following way with highest reading priority value,

<receiver android:name=".SmsListener"
             android:enabled="true"
            android:exported="true"
            android:permission="android.permission.READ_SMS">
    <intent-filter android:priority="2147483647">
        <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
    </intent-filter>
</receiver>

This will surely solve out your problem.

Update from below comment,

Since you are checking on Android version 6.0.1 just follow these steps,

  1. Go to Settings,
  2. Go to Apps
  3. Select your Application
  4. Choose Permissions Option
  5. Enable SMS permission



回答2:


Found a solution.

First make another app your default SMS app.

Then: Google Hangout --> Settings (Disable merged conversations) --> SMS (Disable SMS)




回答3:


You are registering broadcast your in your Activity, so it won't work if your app is in background. you can remove this from your Activity and you can register it in Manifest.

ex:

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

Along with this add permission to recieve sms.

Try this, and it will work




回答4:


After spending more than an hour I found that RECEIVE_SMS permission is required.

ActivityCompat.requestPermissions(this, 
            new String[]{Manifest.permission.RECEIVE_SMS},
            MY_PERMISSIONS_REQUEST_SMS_RECEIVE);

Prioirty is not required to be set. This should work.



来源:https://stackoverflow.com/questions/37019987/sms-broadcast-receiver-not-working

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!