I started a post here still nothing to help me…. The thing is when I register the broadcast receiver via the manifest, it works fine. But when I do the same in Main UI, it seems to not be registering… Even breakpoints inside it are not triggered…. I have no idea to know how to debug this situation… I need it registered programmaitically for two reasons : – broadcast registered in manifest seems to stay alive even after application is shutdown – I using the result of the boradcast in a Main UI class variable… (when registered via manifest, the broadcast is a class separated from Main UI class…
Below is the code that seems to not be registeing my receiver
public class MainActivity extends AppCompatActivity {
public ServerSocket serverSocket; public ServerSocket getServerSocket() { return serverSocket; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btnDemarrer.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Thread socketServerThread = new Thread(new SocketServerThread()); socketServerThread.start(); } }); } @Override public void onResume() { super.onResume(); IntentFilter filter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED"); MainActivity.this.registerReceiver(smsReceived, filter); sendBroadcast(new Intent("android.provider.Telephony.SMS_RECEIVED")); } @Override public void onPause() { MainActivity.this.unregisterReceiver(smsReceived); super.onPause(); } private class SocketServerThread extends Thread { static final int SocketServerPORT = 7777; @Override public void run() { try { serverSocket = new ServerSocket(SocketServerPORT); while (true) { Socket socket = serverSocket.accept(); SocketServerReceiveThread socketServerReplyThread = new SocketServerReceiveThread(socket); socketServerReplyThread.run(); } } catch (IOException e) { e.printStackTrace(); }}} private class SocketServerReceiveThread extends Thread { private Socket hostThreadSocket; SocketServerReceiveThread(Socket socket) { hostThreadSocket = socket; } @Override public void run() { try{ InputStream is = hostThreadSocket.getInputStream(); ObjectInputStream ois = new ObjectInputStream(is); //Launch USSD query }catch(Exception e){ e.printStackTrace(); }}} private class SocketServerReplyThread extends Thread { private Socket hostThreadSocket; private String sms; SocketServerReplyThread(Socket socket, String sms) { hostThreadSocket = socket; this.sms = sms; } @Override public void run() { try{ OutputStream os = hostThreadSocket.getOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(os); MyClass myclass = new MyClass(); myclass.setSms(sms); oos.writeObject(dt2); hostThreadSocket.close(); }catch(Exception e){ e.printStackTrace(); }}} BroadcastReceiver smsReceived = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction(). equals("android.provider.Telephony.SMS_RECEIVED")) { StringBuilder sb = new StringBuilder(); Bundle bundle = intent.getExtras(); if (bundle != null) { Object[] pdus = (Object[]) bundle.get("pdus"); for (Object pdu : pdus) { SmsMessage smsMessage = SmsMessage.createFromPdu ((byte[]) pdu); sb.append("body - " + smsMessage. getDisplayMessageBody()); } Toast.makeText(context,sb.toString(),Toast.LENGTH_LONG); //This is not popping up try { Socket socket = getServerSocket().accept(); SocketServerReplyThread socketServerReplyThread = new SocketServerReplyThread(socket,sb.toString()); socketServerReplyThread.run(); } catch (IOException e) { e.printStackTrace(); }}}}}; }