SMS广播接收器不起作用

met*_*key 1 java sms android listener broadcastreceiver

好的,我已经尝试了Stack上的所有解决方案,但没有任何效果。我当前的方法从MainActivity注册了“ SmsListener”接收器。我要做的就是初始化onReceive方法。没有错误;它根本不是在广播。我究竟做错了什么?在此处粘贴适用的代码。可能需要的其他任何东西都可以问。

更新:这是一个类似的未解决的问题, 我在Android 6.0.1下进行测试时,当Google Hangouts或其他应用收到它时,请听Android传入的SMS。目标Sdk版本为22。最小Sdk为19。值得注意的是,我刚刚在装有Android 4.4.2的LG Optimus GPro上测试了我的原始代码,并且可以正常工作。在装有Android 6.0.1的Nexus上,它仍然无法正常运行。

表现:

<?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>
Run Code Online (Sandbox Code Playgroud)

主要活动

    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();
            }
        }
    };}
Run Code Online (Sandbox Code Playgroud)

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

}}
Run Code Online (Sandbox Code Playgroud)

nad*_*fif 6

花了一个多小时我发现RECEIVE_SMS需要许可。

ActivityCompat.requestPermissions(this, 
            new String[]{Manifest.permission.RECEIVE_SMS},
            MY_PERMISSIONS_REQUEST_SMS_RECEIVE);
Run Code Online (Sandbox Code Playgroud)

不需要设置优先级。这应该有效。


Arj*_*jun 5

尝试按照具有最高阅读优先级值的方式进行操作,

<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>
Run Code Online (Sandbox Code Playgroud)

这肯定会解决您的问题。

从下面的评论更新,

由于您正在检查Android 6.0.1版,因此请按照以下步骤操作,

  1. 前往设置,
  2. 转到应用
  3. 选择你的应用
  4. 选择权限选项
  5. 启用短信权限