Implement Broadcast receiver inside a Service

后端 未结 3 515
无人及你
无人及你 2020-12-18 01:33

I want to check Internet connection throughout the run time of my Android application. I tried using services but seems like it is not the best option. Is there any possible

相关标签:
3条回答
  • 2020-12-18 02:03

    You need not to use Service or BroadCastReceiver for this purpose. Just check Connection status everyTime you need to ping the server.

    you can write a method which checks this and returns a boolean(true/false) according to connection status. Below method does the same.

    public static boolean isNetworkAvailable(Context mContext) {
    
            try {
                final ConnectivityManager conn_manager = (ConnectivityManager) mContext
                        .getSystemService(Context.CONNECTIVITY_SERVICE);
                final NetworkInfo network_info = conn_manager
                        .getActiveNetworkInfo();
    
                if (network_info != null && network_info.isConnected()) {
                    if (network_info.getType() == ConnectivityManager.TYPE_WIFI)
                        return true;
                    else if (network_info.getType() == ConnectivityManager.TYPE_MOBILE)
                        return true;
                }
    
            } catch (Exception e) {
                // TODO: handle exception
            }
            return false;
    
        }
    
    0 讨论(0)
  • 2020-12-18 02:04

    I will show you how to create SMS receiver in a service:

    public class MyService extends Service {
    
    @Override
    public void onCreate() {
        BwlLog.begin(TAG);
        super.onCreate();
    
        SMSreceiver mSmsReceiver = new SMSreceiver();
        IntentFilter filter = new IntentFilter();
        filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
        filter.addAction(SMS_RECEIVE_ACTION); // SMS
        filter.addAction(WAP_PUSH_RECEIVED_ACTION); // MMS
        this.registerReceiver(mSmsReceiver, filter);
    
    }
    
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        super.onStartCommand(intent, flags, startId);
        return START_STICKY;
    }
    
       /**
     * This class used to monitor SMS
     */
    class SMSreceiver extends BroadcastReceiver {
    
        @Override
        public void onReceive(Context context, Intent intent) {
    
            if (TextUtils.equals(intent.getAction(), SMS_RECEIVE_ACTION)) {
                 //handle sms receive
            }
        }
    }
    
    0 讨论(0)
  • 2020-12-18 02:16

    It wouldn't be wise to check for the connectivity every second. Alternatively you can listen to the action (ConnectivityManager.CONNECTIVITY_ACTION) and identify if you are connected to an active network or not.

    IntentFilter filter = new IntentFilter();
    filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
    

    Additionally you can check the network Type that is currently active(Type_WIFI, Type_MOBILE)

    This way, you don't need a service that keeps checking the connectivity every second.

    0 讨论(0)
提交回复
热议问题