好的,我已经尝试了Stack上的所有解决方案,但没有任何效果。我当前的方法从MainActivity注册了“ SmsListener”接收器。我要做的就是初始化onReceive方法。没有错误;它根本不是在广播。我究竟做错了什么?在此处粘贴适用的代码。可能需要的其他任何东西都可以问。
更新:这是一个未解决的类似问题,当 我在Android6.0.1下测试我正在测试的GoogleHangout或其他应用收到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>
主要活动
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"); }}
找到了解决方案。
首先,将另一个应用程序设置为默认的SMS应用程序。
然后:Google环聊->设置(禁用合并的对话)->短信(禁用短信)