Android 应用程序关闭时,BroadcastReceiver不工作
我有一个MainActivity.java和一个SmsReceiver.java 我想在手机收到任何信息时启动Main活动 MainActivity.java--> SmsReceiver.java-->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
公共类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"/>