Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/203.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java IntentService内部的RegisterReceiver,跟踪SmsManager_Java_Android - Fatal编程技术网

Java IntentService内部的RegisterReceiver,跟踪SmsManager

Java IntentService内部的RegisterReceiver,跟踪SmsManager,java,android,Java,Android,我试图通过使用扩展“IntentService”的类来跟踪sms发送进度 消息已发送,我在其他设备上看到它,问题是“BroadcastReceiver” 不会运行onReceive方法 在RegisterReceiver之前,向我的mainActivity发送广播时,在它内部它无法工作 我的服务级别: public class SmsReciveService extends IntentService { public SmsReciveService() { super("Sm

我试图通过使用扩展“IntentService”的类来跟踪sms发送进度

消息已发送,我在其他设备上看到它,问题是“BroadcastReceiver” 不会运行onReceive方法

在RegisterReceiver之前,向我的mainActivity发送广播时,在它内部它无法工作

我的服务级别:

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));
}