Java IntentService内部的RegisterReceiver,跟踪SmsManager
我试图通过使用扩展“IntentService”的类来跟踪sms发送进度 消息已发送,我在其他设备上看到它,问题是“BroadcastReceiver” 不会运行onReceive方法 在RegisterReceiver之前,向我的mainActivity发送广播时,在它内部它无法工作 我的服务级别:Java IntentService内部的RegisterReceiver,跟踪SmsManager,java,android,Java,Android,我试图通过使用扩展“IntentService”的类来跟踪sms发送进度 消息已发送,我在其他设备上看到它,问题是“BroadcastReceiver” 不会运行onReceive方法 在RegisterReceiver之前,向我的mainActivity发送广播时,在它内部它无法工作 我的服务级别: public class SmsReciveService extends IntentService { public SmsReciveService() { super("Sm
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);
}
}
我做错了什么?请帮助,问候。您的接收者应该在清单中注册,而不是通过
registerReceiver()
。一旦onHandleIntent()
结束,您的IntentService
将被销毁,并带走动态注册的接收器。完成本教程:
现在,用户可以上网冲浪,或接听电话或其他任何。曲目和发送短信在后台工作,当用户返回时,他会在线看到更改。registerReceiver(new MyReceiver(),newIntentFilter(MyReceiver.smsSent));
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));
}