Android 应用程序关闭时,BroadcastReceiver不工作

Android 应用程序关闭时,BroadcastReceiver不工作,android,Android,我有一个MainActivity.java和一个SmsReceiver.java 我想在手机收到任何信息时启动Main活动 MainActivity.java--> SmsReceiver.java--> 公共类SmsReceiver扩展了BroadcastReceiver{ 字符串str=“”; @凌驾 公共void onReceive(上下文、意图){ Bundle=intent.getExtras(); SmsMessage msgs=null; if(bundle!=null){ Obj

我有一个MainActivity.java和一个SmsReceiver.java 我想在手机收到任何信息时启动Main活动

MainActivity.java-->

SmsReceiver.java-->

公共类SmsReceiver扩展了BroadcastReceiver{
字符串str=“”;
@凌驾
公共void onReceive(上下文、意图){
Bundle=intent.getExtras();
SmsMessage msgs=null;
if(bundle!=null){
Object[]pdus=(Object[])bundle.get(“pdus”);
对于(int i=0;i
AndroidManifest.xml包含-->


并且还提供了权限-->


但当收到任何新消息时,什么都不会发生


请建议此处是否有任何错误。

尝试在清单中的Receiver元素中添加android:exported=“true”,确保您确实拥有“接收短信”权限。另外请注意,您的额外设置的键不匹配-
“message”
“message”
。添加exported=“true”后,它会工作,但仅当应用程序最小化时。当应用程序关闭时,它不会读取消息。另外,我从SmsReceiver.java发送的字符串不会发送到MainActivity.java--->默认情况下,接收器已导出。我真的不认为显式声明它导出实际上修复了任何问题。你一定改变了什么。至于
字符串
extra没有进入
main活动
,请记住,我注意到您用于放置和获取该额外值的键不匹配-
“message”
“message”
。它们必须完全匹配,并且区分大小写。
public class MainActivity extends AppCompatActivity{

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

        String sms = getIntent().getStringExtra("message");
    }
}
public class SmsReceiver extends BroadcastReceiver{

    String str = "";

    @Override
    public void onReceive(Context context, Intent intent) {
        Bundle bundle = intent.getExtras();
        SmsMessage msgs = null;
        if (bundle != null) {
            Object[] pdus = (Object[]) bundle.get("pdus");
            for (int i = 0; i < pdus.length; i++) {
                msgs = SmsMessage.createFromPdu((byte[]) pdus[i]);
                str += msgs.getMessageBody().toString();
            }
        sendToMain(context,intent);
        }
    }

    public void sendToMain(Context context,Intent intent){
        Toast.makeText(context,"Message received", Toast.LENGTH_SHORT).show();
        Intent i = new Intent(context,MainActivity.class);
        i.putExtra("message",str);
        i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|   Intent.FLAG_ACTIVITY_CLEAR_TOP| Intent.FLAG_ACTIVITY_SINGLE_TOP);
        context.startActivity(i);
    }
}
    <receiver android:name=".SmsReceiver"
                android:exported="true">
        <intent-filter>
            <action android:name=
                "android.provider.Telephony.SMS_RECEIVED" />
        </intent-filter>
    </receiver>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<uses-permission android:name="android.permission.READ_SMS"/>