java - IntentService 中的 RegisterReceiver,跟踪 SmsManager

标签 java android

我正在尝试通过使用扩展“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/

相关文章:

java - 如何在 Dr Java 中使用鼠标监听器识别鼠标进入了哪个按钮

java - Microsoft SQL Server - 查询结果巨大,导致 ASYNC_NETWORK_IO 等待问题

java - Android 在使用 copyPixelsToBuffer 时如何应用 alpha channel ?

android - Cardslib - 自定义 CardArrayAdapter

android - 使用 YouTubePlayerSupportFragment 为 youtube 视频设置特定时间

android - 某些设备上的谷歌云消息传递错误

android - ButterKnife错误:找不到符号方法bind(MyActivity)

java - 使用 Java 9 将自定义 JMOD 添加到模块路径

android - Android 上 Jetty 上的 Jersey 抛出 ContainerException : The ResourceConfig instance does not contain any root resource classes

javax.servlet.ServletException : Servlet. 从 "viralpatel.net"运行示例时出现 init() 异常