Maybe these quotes and links can help you code your own solution:
1.- To get a list of available network providers (quoting How to get a list of available network providers? in full):
Since Android is open source I had a look at the sources and finally
found something called INetworkQueryService. I guess you can do the
same as the android settings implementation and interact with this
service. Some guidance through NetworkSettings.java:
- onCreate starts the NetworkQueryService and binds it.
- loadNetworksList() tells the service to query for network operators.
- INetworkQueryServiceCallback is evaluated and if the event “EVENT_NETWORK_SCAN_COMPLETED” was raised, networksListLoaded will be
called to iterate over the available Networks.
2.- Even a quick read to NetworkSetting.java and INetworkQueryService interface, gives us an idea to achieve your goal.
- Connect the service in declaration.
/** * Service connection code for the NetworkQueryService. * Handles the work of binding to a local object so that we can make * the appropriate service calls. */ /** Local service interface */ private INetworkQueryService mNetworkQueryService = null; /** Service connection */ private final ServiceConnection mNetworkQueryServiceConnection = new ServiceConnection() { /** Handle the task of binding the local object to the service */ public void onServiceConnected(ComponentName className, IBinder service) { if (DBG) log("connection created, binding local service."); mNetworkQueryService = ((NetworkQueryService.LocalBinder) service).getService(); // as soon as it is bound, run a query. loadNetworksList(); } /** Handle the task of cleaning up the local binding */ public void onServiceDisconnected(ComponentName className) { if (DBG) log("connection disconnected, cleaning local binding."); mNetworkQueryService = null; } };
- onCreate starts the NetworkQueryService and binds it.
Intent intent = new Intent(this, NetworkQueryService.class); ... startService (intent); bindService (new Intent(this, NetworkQueryService.class), mNetworkQueryServiceConnection, Context.BIND_AUTO_CREATE);
- loadNetworksList() tells the service to query for network operators.
private void loadNetworksList() { ... // delegate query request to the service. try { mNetworkQueryService.startNetworkQuery(mCallback); } catch (RemoteException e) { } displayEmptyNetworkList(false); }
- INetworkQueryServiceCallback is evaluated:
/** * This implementation of INetworkQueryServiceCallback is used to receive * callback notifications from the network query service. */ private final INetworkQueryServiceCallback mCallback = new INetworkQueryServiceCallback.Stub() { /** place the message on the looper queue upon query completion. */ public void onQueryComplete(List<OperatorInfo> networkInfoArray, int status) { if (DBG) log("notifying message loop of query completion."); Message msg = mHandler.obtainMessage(EVENT_NETWORK_SCAN_COMPLETED, status, 0, networkInfoArray); msg.sendToTarget(); } };
- If the event “EVENT_NETWORK_SCAN_COMPLETED” was raised, networksListLoaded will be called to iterate over the available Networks.
private void networksListLoaded(List<OperatorInfo> result, int status) { ... if (status != NetworkQueryService.QUERY_OK) { ... displayNetworkQueryFailed(status); displayEmptyNetworkList(true); } else { if (result != null){ displayEmptyNetworkList(false); ... } else { displayEmptyNetworkList(true); } } }
I hope it helps. I think it’s an interesting challenge so maybe I’ll give it a try next time I have some spare time. Good luck!