短信广播接收器无法正常工作

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

更新:这是一个类似的未解决的问题当Google Hangout或其他应用收到它时,听取Android传入的短信我正在Android 6.0.1下测试。 目标Sdk版本是22. Min Sdk是19.值得注意的是,我刚刚使用Android 4.4.2在LG Optimus GPro上测试了我的原始代码并且它有效。 它仍然无法在我的Nexus上运行Android 6.0.1。

表现:

                 `              

主要活动

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

尝试以下具有最高读数优先级值的方式,

      

这肯定会解决你的问题。

从以下评论更新,

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

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

找到了解决方案。

首先将另一个应用程序设为您的默

然后:Google环聊 – >设置(禁用合并对话) – >短信(禁用短信)

您正在Activity中注册broadcast ,因此如果您的应用处于后台,则无法使用。 你可以从你的Activity删除它,你可以在Manifest中注册它。

例如:

       

随着这个添加权限接收短信。

试试这个,它会起作用