I saw:

http://developer.android.com/reference/android/telephony/CellInfo.html

and thought that having the signal strength tower ID and in use and 
neighboring
towers all in one callback would be nice to have.  I wrote a test program 
to see
if I could get this CellInfoGsm on a Galaxy Nexus or Nexus 4.  Snippet of 
test
code follows:

        
        @Override
        public void onCreate() {
                // Notification to not get killed
                Log.d("CellInfoTest","Service onCreate");
                mNotification = buildNotification();
                startForeground(5,mNotification);
                
((NotificationManager)getSystemService(NOTIFICATION_SERVICE)).notify(5,mNotification);
                mListener = new PhoneStateListener() {
                        public void onCellInfoChanged(List<CellInfo> c) {
                                Log.d("CellInfoTest","onCellInfoChanged 
called");
                                dumpCellInfoList(c);
                        }
                        public void onCellLocationChanged(CellLocation c) {
                                Log.d("CellInfoTest","onCellLocationChanged 
called");
                                
dumpCellLocation(c);                            
                        }
                };
                myTm = 
(TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);

        }
        
        private void dumpCellInfoList(List<CellInfo> c) {               
                try {
                        for (int i = 0; i < c.size(); i++) {
                                
Log.d("CellInfoTest","dumpInfoLocation:"+c.get(i).toString());
                        }
                } catch (java.lang.NullPointerException e) {
                        Log.d("CellInfoTest","Null pointer for CellInfo");
                }
        }
        
        private void dumpCellLocation(CellLocation c) {
                try {
                        
Log.d("CellInfoTest","dumpCellLocation:"+c.toString());
                } catch (java.lang.NullPointerException e) {
                        Log.d("CellInfoTest","Null pointer for 
CellLocation");
                }
        }
        
        @Override
        public int onStartCommand(Intent i, int flags, int startid){
                Log.d("CellInfoTest","Service onStartCommand");
                myTm.listen(mListener,
                                PhoneStateListener.LISTEN_CELL_INFO + 
PhoneStateListener.LISTEN_CELL_LOCATION);
                return START_STICKY;            
        }

I've also included

 <uses-sdk  android:minSdkVersion="17" />
 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

in the manifest to be sure I was on an updated phone that supported the API 
and could see
the cell location information.  I gathered the adb logcat output and 
toggled the airplane mode
a few times to see what got called back.   I'm seeing:

01-25 19:04:31.516 D/CellInfoTest( 7999): Starting service
01-25 19:04:31.526 D/CellInfoTest( 7999): Service onCreate
01-25 19:04:31.526 D/CellInfoTest( 7999): Service onStartCommand
01-25 19:04:31.536 D/CellInfoTest( 7999): onCellLocationChanged called
01-25 19:04:31.536 D/CellInfoTest( 7999): 
dumpCellLocation:[10989,194036662,418]
01-25 19:04:31.536 D/CellInfoTest( 7999): onCellInfoChanged called
01-25 19:04:31.536 D/CellInfoTest( 7999): Null pointer for CellInfo
01-25 19:04:58.935 D/CellInfoTest( 7999): onCellLocationChanged called
01-25 19:04:58.935 D/CellInfoTest( 7999): dumpCellLocation:[10989,-1,418]
01-25 19:04:59.826 D/CellInfoTest( 7999): onCellLocationChanged called
01-25 19:04:59.826 D/CellInfoTest( 7999): dumpCellLocation:[-1,-1,-1]
01-25 19:04:59.956 D/CellInfoTest( 7999): onCellLocationChanged called
01-25 19:04:59.966 D/CellInfoTest( 7999): dumpCellLocation:[-1,-1,0]
01-25 19:05:00.857 D/CellInfoTest( 7999): onCellLocationChanged called
01-25 19:05:00.857 D/CellInfoTest( 7999): 
dumpCellLocation:[10989,194036662,418]

which looks like as soon as I register I get a callback, but the CellInfo 
is null (which
I think is very odd, as it should at least contain the location/strength of 
the cell that
is currently connected and dumped by dumpCellLocation) each of the 
callbacks that
follow happen with the airplane mode toggle an only for 
onCellLocationChanged.

My questions are:

Is there a flaw in my code that I am missing?
Is there a permission that I need to get the onCellInfoChanged callback to 
happen?
If my code looks good, who do I look to to ask why the Galaxy Nexus and 
Nexus 4
both fail to make the callbacks (is there a CTS case update that needs to 
happen,
or should I file a bug against the android code?)

        Dan S.

-- 
-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Android Developers" group.
To unsubscribe from this group, send email to 
android-developers+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to