Is it possible to change the cell which your smartphone is connected to?
No. It is impossible.
Device changes the Cell which is camped via 2 mechanisms:
Cell Re-selection
Handover
Cell Reselection
This mechanism enable the device to find a better cell to register. Basically, phone remains measuring signal level of different cells, frequencies and RAT (2G/3G/4G) and it can then, select an suitable cell.
Since phone choose the best cell, re-selection is possible only when device is in IDLE (IDLE means that no resources are allocated to your device.. there's no DATA Traffic / Call ongoing etc).
Each MODEM vendor has implemented its own Algorithm to decide the most suitable cell but usually, thy always try to move your device to LTE and to the cell with strongest signal level.
HANDOVER
This mechanism allow the phone to move to a better cell while it is on service (during a call or during data traffic). Since you have resources allocated to you, this is fully controlled by network (only network knows if target cell can receive your device and keep delivering the service that you are using).
This is just overview
This is just the basic idea of what happens in Modem side. Even in case of re-selection, a lot of parameters are controlled by network (such as "Start to measure a better cell if the signal level falls below a certain level" etc).
Most important is that you can not manually control it... You can force your device to 2G/3G or LTE. Even then, MODEM side will decide the better cell to you (based on carrier settings for that location) and you can not control it...
Also, each chipset (modem) vendor has its own implementation for this...
Some chipset vendors are Qualcom, Infineon, Marvell, Spreadtrum, Broadcom (RIP)
Related
I have Android devices mounted on vehicles in a manufacturing facility, and I'd like to deter people from removing them from one vehicle and moving it to another vehicle, but also still allow it (long story, but instead of physically locking the device to the vehicle with a cable or other device I'm looking to make it more inconvenient than impossible...). I was thinking if I mounted a Bluetooth low energy BTLE device or beacon of some sort to the vehicle in some inaccessible location, then pair my Android device to that beacon, my device would be allowed to work as long as it 'saw' that beacon. If someone were to move the device to another vehicle, it wouldn't see the beacon and would have to be 'paired' to the new vehicle, supplying a reason why it had to be moved, etc. Is BTLE/beacon the right technology for this or is there something better?
Such a solution is possible with BLE beacons but has some implementation challenges. I have seen beacons used successfully in similar use cases like automatic workstation locking, contact tracing, virtual tethering of demo phones, and convention audience counting.
BLE has a range of about 30-40 meters, longer with clear line of sight. If the Android devices is moved from one vehicle to another that are within 40 meters of each other, the original beacon will probably still be visible.
You may be able to address the above issue with a "closest beacon" strategy, meaning that you consider whatever is seen as closest beacon above a certain signal threshold to be the vehicle the device is on or in.
If you use a battery-powered beacon, you can mount it anywhere, but battery life will typically be limited to a year or less.
A plugged-in beacon will never run out of power, but requires a USB supply, and AC outlet, or a DC supply like a car cigarette lighter port. This limits where you can hide it.
As you mention, there are other solutions aside from BLE like physical tether. But it is not inappropriate to consider BLE as it is widely used for similar proximity measurement applications.
A mobile phone can carry out power measurements
on the frequency currently in use, on UMTS neighbour frequencies and on GSM frequencies. It sends the results to the
network on the current link. A new link is established to the
neighbour cell that offers the best radio link quality.
Mobile phones perform measurements
for determining link quality in a radio
network and then send the results to
the network as UE measurement reports.
These reports provide vital information
for dynamic network planning and the
distribution of resources at the radio
interface (radio resource management).
The measurements and the mode of signalling are defined in the 3GPP specifications. Mobile phones have to be
tested to verify this functionality and the
stipulated measurement accuracy.
A mobile phone measures important
characteristics such as the power on
the frequency currently in use (intra-frequency measurements), on UMTS neighbour frequencies (inter-frequency measurements) and on GSM frequencies
(inter-RAT measurements; RAT: radio
access technology). These measurements are used to determine which
neighbour cell offers the best radio link
quality; a link is then set up to this cell.
During signalling, it is also possible to
query the current transmit power of the
mobile phone, the timing of its transmit
and receive signals, and the block error
ratio (BLER) of a data channel. To prepare for handover between UMTS cells,
the mobile phone can determine the
frame timing of its current link and of its
target cell.
How can we read the data that come out of the mobile phone using an android app? how can we read transmit power of the mobile phone device to be more specific?
Like tx level in the picture:
The interface into the telephony side of an Android device (assuming it supports telephony - i.e. not a tablet, TV STB etc) is the Android telephony API's:
https://developer.android.com/reference/android/telephony/package-summary
You will see there are several which provide information around the strength of the signal and also the neighbouring cell strength.
The strengths here are the received signal strength. I am not aware at the time of writing of an API which will give the transmitted power. It may be useful to note, depending on your needs, that the transmit power is usually influenced by the receive strength - if a phone is near a tower and receiving a good signal it typically does not need to use as much power to transmit to that tower, and conversely if it is a long way away it typically needs more power to reach the tower. This is just a rough principle, but depending on your application it may be useful.
I am researching on Cellular connectivity in rural areas.
Is there an API in Android which helps you access Cellular radio properties as a call or SMS is made ?
P.S.: I am not looking for properties like signal Strength or Neighboring Cell Info. I am interested in listening to changes like in increase in CPU cycles, cellular handovers etc.
Edit:
My main reason for asking this is, so that I can detect events from different SIMs in Dual SIM phones as there is no current way of doing this. So by monitoring the radios, I can tell whether this was the SIM that made the call or the other.
I'm working on a hardware/firmware/Android app project where the Android (in this case a Nexus 7 tablet) connects to a custom hardware platform via USB. The Android is in Accessory mode, which means the other end of the wire (the Host) supplies power to the Android. The hardware has a dedicated 5V 2A switching supply for the USB connector so there is plenty of current available for the tablet.
When the Android is plugged in to the hardware, it reports that the battery is charging and it requests 500mA from the USB connection (for those who don't know, the USB protocol requires the device to inform the host of its current requirements). The hardware easily provides this current and the 5V stays rock-solid.
Despite this, the charge level never changes as long as the device remains in use. This application uses the tablet in what is basically a kiosk mode - the display stays on at full brightness continuously. Sleep the tablet and the battery charges, but leave it on and there is no reported change in the battery level.
The only explanation I can think of is that the Android's power supply circuitry cannot simultaneously handle the current requirements of both full operation and battery charging. But I wonder if this is a conscious decision based on expected power availability, and if there may be some sort of configuration option in the OS that would inform the OS that more current is, indeed, available. Perhaps then the OS would request more current from the Host and have enough to both charge the battery and run the device at the same time.
Anyone have any data on this? Thanks!
When I started a company that designed battery chargers for cell phones and the like, I didn't realize that it took more than providing a voltage source to a USB connector. At first we encountered having to provide different voltages on the data pins to tell the connected device how much current it could expect to draw. Now there are several manufacturers of USB interface ICs that do all the dirty work of handshaking and act as current limiters as well. Most smartphones today draw an average of 1A from the 5V USB bus. Some can, and will (especially Apple products) draw up to 2.1A if allowed. Most tablets run in the range of 1.5A to 2.1A. Any of the above will run in a mode drawing lesser current, if the device finds the charger unable to supply the full current. This will sometimes, as in your case, allow the device to either run or charge, but not both. In some cases, the available current isn't enough to maintain a charge level , and the device's battery slowly discharges, even though it's connected to a charger. If you Google "USB charger data pin voltages" you can see how to tell your device it can draw more current. The proper method though would be to use a controller IC something like TI's TPS2511 "USB Dedicated Charging Port Controller and Current Limiting Power Switch". Hope this helps and isn't too too late.
I have problem (challenge) with my app. I want to be connected to the "best" GSM or CDMA cell - the closest, with the best signal, etc... As I turned off the cell-phone functions and turned it on back. That is the thing I want to do in my app, because I need to have the most recent informations of location without using GPS or any data.
Can I find the way, how to force Android to refind the GSM/CDMA cell?
Lot of thanks for all!
For GSM, the cell you are connected to is decided by the network. The network tells the device which cell to use and also when to perform an handover,.i.e. change the cell. I would assume that this functionality is deeply buried in the hardware/firmware of your device with no chance to change it