我正在构建一个Android应用程序来处理短信,我制作了广播接收器来监听传入的短信。当它到来时,它应该将短信内容发送到另一个类来执行一些逻辑,我使用接口来实现这一点,这是我的代码。
public class SmsReceiver extends BroadcastReceiver {
public static void initSmsFetcher(SmsFetcher mSmsFetcher){
smsFetcher = mSmsFetcher;
}
@SuppressLint("UnsafeProtectedBroadcastReceiver")
@Override
public void onReceive(Context context, Intent intent) {
Bundle extras = intent.getExtras();
if (extras != null){
Object[] smsextras = (Object[]) extras.get( "pdus" );
for (Object smsextra : smsextras) {
SmsMessage smsmsg = SmsMessage.createFromPdu((byte[]) smsextra);
smsFetcher.onSmsReceived(smsmsg);
}
}
}
}
interface SmsFetcher{
void onSmsReceived(SmsMessage smsMessage);
}
这是我的简单课程。
public class SmsEasy implements SmsFetcher{
SmsEasy(){
SmsReceiver.initSmsFetcher(this);
}
@Override
public void onSmsReceived(SmsMessage smsMessage) {
// Do some logic.
}
}
这是我的主要活动。
public class MainActivity extends AppCompatActivity {
SmsEasy smsEasy;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
smsEasy = new SmsEasy();
}
}
我在清单中注册了我的广播接收器。 当我的应用程序运行时,这工作正常,但当应用程序关闭时出现问题,它告诉我,smsFetcher 在这一行中为空: smsFetcher.onSmsReceived(smsmsg);但我的接收器仍然可以正常捕获短信。
你的进程不会永远存在。当短信到达时,Android 可能需要为应用程序代码创建一个进程。当它这样做时,它将创建一个
SmsReceiver
的实例并在其上调用 onReceive()
。它不会创建 MainActivity
的实例。
因此,
SmsReceiver
需要完全独立于MainActivity
工作。当
MainActivity
的
onReceive()
被调用时,不要假设
SmsReceiver
在您的应用程序进程中执行了任何操作。