我正在尝试通过使用扩展“IntentService”的类来跟踪短信发送进度。
消息已发送,我在其他设备上看到它,问题是“BroadcastReceiver” 不会运行 onReceive 方法。
虽然我的 mainActivity 的 sendBroadcast 在 RegisterReceiver 之前工作,但在它内部它不会工作。
我的服务等级:
public class SmsReciveService extends IntentService {
public SmsReciveService() {
super("SmsReciveService");
}
public static final String NOTIFICATION = "com.example.Send";
public static ArrayList<String> phoneNumbers = new ArrayList<String>();
public static String messageToSent="";
public static final String hello = "";
public static int numberOfRecives;
public static int numberOfRecivesCurrent;
public static int delay;
public static int sentCounter =0;
public static int notSentCounter =0;
Intent intent2 = new Intent(NOTIFICATION);
@Override
protected void onHandleIntent(Intent intent){
phoneNumbers = (ArrayList<String>) intent.getSerializableExtra("members");
messageToSent = intent.getStringExtra("messageToSent");
sendSMS();
}
public void sendSMS() {
String smsSent = "SEND";
final ArrayList<PendingIntent> sentIntents = new ArrayList<PendingIntent>();
final SmsManager sm = SmsManager.getDefault();
final ArrayList<String> parts =sm.divideMessage(messageToSent);
final int numParts = parts.size();
for (int j = 0; j < numParts; j++) {
sentIntents.add(PendingIntent.getBroadcast(this, 0, new Intent(smsSent), 0));
}
numberOfRecives=numParts;
delay = numParts*2500;
Intent intent2 = new Intent(NOTIFICATION);
intent2.putExtra(hello, "sending,Number of parts :" + Integer.toString(numParts) );
sendBroadcast(intent2);
registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context arg0, Intent arg1) {
numberOfRecivesCurrent+=1;
Intent intent2 = new Intent(NOTIFICATION);
intent2.putExtra(hello, "test");
sendBroadcast(intent2);
if(numberOfRecivesCurrent==numberOfRecives){
switch (getResultCode()){
case Activity.RESULT_OK: break;
case SmsManager.RESULT_ERROR_GENERIC_FAILURE:break;
case SmsManager.RESULT_ERROR_NO_SERVICE:break;
case SmsManager.RESULT_ERROR_NULL_PDU:break;
case SmsManager.RESULT_ERROR_RADIO_OFF:break;
}
numberOfRecives+=numParts;
}
}
}, new IntentFilter(smsSent));
for(int i=0; i<phoneNumbers.size(); i++){
Handler hand = new Handler();
final int index=i;
hand.postDelayed(new Runnable() {
@Override
public void run() {
String phone = phoneNumbers.get(index).split(",")[1];
sm.sendMultipartTextMessage(phone,null, parts, sentIntents, null);
}
}, delay*i);
}
}
主类中的 BroadcastReceiver 接收器:
private BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String string = intent.getStringExtra(SmsReciveService.hello);
Toast.makeText(Send.this,string,Toast.LENGTH_LONG).show();
}
};
protected void onPause() {
super.onPause();
unregisterReceiver(receiver);
}
protected void onResume() {
super.onResume();
registerReceiver(receiver, new IntentFilter(SmsReciveService.NOTIFICATION));
}
我做错了什么?请帮忙,问候。
最佳答案
您的接收器应该在 list 中注册,而不是通过 registerReceiver()
。一旦 onHandleIntent()
结束,您的 IntentService
就会被销毁,并带走您动态注册的接收器。
关于java - IntentService 中的 RegisterReceiver,跟踪 SmsManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26754302/