【发布时间】:2018-06-11 07:15:21
【问题描述】:
在我的应用程序中,我有一个广播接收器(在清单中注册)类,我想从该类向 MainActivity 发送一个 Intent。因此,我在 MainActivity 和 Intent Filter 中有另一个广播接收器(动态注册)。但我没有收到主要活动中的意图。 这是代码:
public class SmsReceiver extends BroadcastReceiver {
public static final String SMS_BUNDLE = "pdus";
public SmsReceiver(){
}
String TAG = SmsReceiver.class.getSimpleName();
@Override
public void onReceive(Context context, Intent intent){
Bundle bundle = intent.getExtras();
if (bundle != null) {
Object[] sms = (Object[]) bundle.get(SMS_BUNDLE);
String str = "";
for (int i=0; i < sms.length; i++) {
SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) sms[i]);
String smsbody = smsMessage.getMessageBody().toString();
str += smsbody;
}
Intent bcIntent = new Intent();
bcIntent.setAction("SMS_RECEIVED_ACTION");
bcIntent.addCategory(Intent.CATEGORY_DEFAULT);
bcIntent.setFlags(Intent.FLAG_RECEIVER_FOREGROUND);
bcIntent.putExtra("message", str);
context.sendBroadcast(bcIntent);
}
}
}
在 MainActivity 中:
public class MainActivity extends AppCompatActivity
{
public boolean receivedSMS;
public String displaySMS;
private BroadcastReceiver iReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String qqq = intent.getExtras().getString("message");
info2(intent.getExtras().getString("message"));
evalMsg(qqq);
}
};
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
graphInit();
timerInit();
smnInit();
}
@Override
protected void onResume(){
super.onResume();
IntentFilter iFilter = new IntentFilter();
iFilter.addAction("SMS_RECEIVED_ACTION");
registerReceiver(iReceiver, iFilter);
}
@Override
protected void onPause(){
unregisterReceiver(iReceiver);
super.onPause();
}
有谁知道为什么主活动中的广播接收器没有收到意图? TextView 中应该显示文本,但从未显示。感谢您的任何想法
【问题讨论】:
-
请出示您的 Manifest 文件。
-
可能是一些权限问题(Android Marshmallow 之后)。参考developer.android.com/training/permissions/requesting