Re: [android-developers] Re: Google Play Services Geofence Problem
I thought one of the great benefits to use Google play services was that it would do the smart stuff for us. What mean is shouldn't it detect that the radius of my geo fence is only 80 meters and realize it should keep the gps going until I have traveled far enough that the next best source (2373 meters) will be good enough? I thought it also took into any my activity so if I was sitting still it could power down things, but as soon as I start moving it should know it better start up the gps? It should also never use a source when it already knows that using that source could incorrectly put me outside of my geo fence by mistake, which is what is happening. Anyway, just my thoughts. Why use googly play services when I have to do all the hard work anyway? On Mar 9, 2015 5:09 AM, lbendlin l...@bendlin.us wrote: Regardless of the API there is no magic involved here. The physical GPS hardware has to be active at all times to provide that level of accuracy (and you have to have sufficient sky view too). That comes at a cost, specifically to the battery. The OS is likely trying to reduce that cost by switching to the more readily available lower cost cell triangulation position. On Saturday, March 7, 2015 at 5:28:53 PM UTC-5, Tony Pitman wrote: I wrote an app that uses location services. It creates a geofence around my house and lets my app know when I come home. I am doing this in a service in the background so that my app doesn't have to be the active app to function. I was using the LocationManager api. I have a Samsung Galaxy Note 2 with Android 4.1 on it. The app was working perfectly. I upgrade the phone to Android 4.3 because it just became available. Now all of a sudden my app started getting notifications that I was outside of the geofence when I was still inside and not even really moving. I did some searching and saw a video presentation from the Google IO conference in 2013. It talked about the new Google Play Services (at the time new) and all the great stuff they were doing with location. I decided to switch to that because it seemed like a better way to go. When I studied the api I found that even the stuff in that video was deprecated and there was newer stuff. I got excited thinking it would solve my problem of accuracy. I just finished implementing my app using the Google Play services Geofencing. Guess what? I have the same problem. I put in some logging and basically here is what happens: I use the Fusion request for location updates to figure out where I am. I first look for an accuracy of 10 meters for at least 5 samples. This is done because my radius is 80 meters, so I have to have a high accuracy when starting out. Once I get that I turn OFF the location updates and set up the geofence. I use the location of my house that was previously gathered from a mapping piece of my app with a radius of 80 meters. I would like to be able to go down to 20 meters if I can get it working, but 80 for now. When I first create the geofence I get 2 notifications right away. The accuracy on those events is 3.8 meters. I then let the app sit for about a minute. At that point I then get 2 more transition events. Both of them say I am outside of the geofence. The accuracy on these events is 2373 meters. I can only assume that after a minute the api has switched to a lower accuracy system for some reason. I then walked at least 80 meters away from my house and I never got any more transition events at all. The question is what do I do about it? My app is even still the active app, so this is not a background issue. I assume it might even be worse if I was in the background. I have requested the highest accuracy. I have heard people say that the answer to this problem is to leave a location update request going. Doesn't the defeat the whole purpose of letting the api take over for us? Shouldn't I be able to say I need high accuracy geofencing and the api just takes care of it? Here are some snippets from my code: public synchronized void buildGoogleApiClient() { _googleApiClient = new GoogleApiClient.Builder(_context) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .addApi(LocationServices.API) .build(); } Geofence geofence = new Geofence.Builder() .setRequestId(door.Id) .setTransitionTypes(Geofence.GEOFENCE_TRANSITION_ENTER | Geofence.GEOFENCE_TRANSITION_EXIT) .setCircularRegion(door.Latitude, door.Longitude, door. ActivationDistance) .setExpirationDuration(Geofence.NEVER_EXPIRE) .build(); GeofencingRequest geofenceRequest = new GeofencingRequest.Builder() .addGeofence(geofence) .setInitialTrigger(door.IsInside ? GeofencingRequest.INITIAL_ TRIGGER_ENTER : GeofencingRequest.INITIAL_TRIGGER_EXIT) .build
Re: [android-developers] Re: Google Play Services Geofence Problem
Thank you for your reply. That is the thing. I am using high accuracy and at first I am getting an accuracy of 3m. It is after a minute that it switches to 2373 meters. On Mar 7, 2015 11:32 PM, gjs garyjamessi...@gmail.com wrote: Hi, What Location mode (in Android Settings) are you using? To achieve 20m I think you need to have 'High Accuracy' or 'Device Only' so that the GPS receiver will be used for your Geo fence. 2373 m accuracy indicates you are probably using 'Battery Saving' Location mode (cell tower wifi only) Regards On Sunday, March 8, 2015 at 9:28:53 AM UTC+11, Tony Pitman wrote: I wrote an app that uses location services. It creates a geofence around my house and lets my app know when I come home. I am doing this in a service in the background so that my app doesn't have to be the active app to function. I was using the LocationManager api. I have a Samsung Galaxy Note 2 with Android 4.1 on it. The app was working perfectly. I upgrade the phone to Android 4.3 because it just became available. Now all of a sudden my app started getting notifications that I was outside of the geofence when I was still inside and not even really moving. I did some searching and saw a video presentation from the Google IO conference in 2013. It talked about the new Google Play Services (at the time new) and all the great stuff they were doing with location. I decided to switch to that because it seemed like a better way to go. When I studied the api I found that even the stuff in that video was deprecated and there was newer stuff. I got excited thinking it would solve my problem of accuracy. I just finished implementing my app using the Google Play services Geofencing. Guess what? I have the same problem. I put in some logging and basically here is what happens: I use the Fusion request for location updates to figure out where I am. I first look for an accuracy of 10 meters for at least 5 samples. This is done because my radius is 80 meters, so I have to have a high accuracy when starting out. Once I get that I turn OFF the location updates and set up the geofence. I use the location of my house that was previously gathered from a mapping piece of my app with a radius of 80 meters. I would like to be able to go down to 20 meters if I can get it working, but 80 for now. When I first create the geofence I get 2 notifications right away. The accuracy on those events is 3.8 meters. I then let the app sit for about a minute. At that point I then get 2 more transition events. Both of them say I am outside of the geofence. The accuracy on these events is 2373 meters. I can only assume that after a minute the api has switched to a lower accuracy system for some reason. I then walked at least 80 meters away from my house and I never got any more transition events at all. The question is what do I do about it? My app is even still the active app, so this is not a background issue. I assume it might even be worse if I was in the background. I have requested the highest accuracy. I have heard people say that the answer to this problem is to leave a location update request going. Doesn't the defeat the whole purpose of letting the api take over for us? Shouldn't I be able to say I need high accuracy geofencing and the api just takes care of it? Here are some snippets from my code: public synchronized void buildGoogleApiClient() { _googleApiClient = new GoogleApiClient.Builder(_context) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .addApi(LocationServices.API) .build(); } Geofence geofence = new Geofence.Builder() .setRequestId(door.Id) .setTransitionTypes(Geofence.GEOFENCE_TRANSITION_ENTER | Geofence.GEOFENCE_TRANSITION_EXIT) .setCircularRegion(door.Latitude, door.Longitude, door. ActivationDistance) .setExpirationDuration(Geofence.NEVER_EXPIRE) .build(); GeofencingRequest geofenceRequest = new GeofencingRequest.Builder() .addGeofence(geofence) .setInitialTrigger(door.IsInside ? GeofencingRequest.INITIAL_ TRIGGER_ENTER : GeofencingRequest.INITIAL_TRIGGER_EXIT) .build(); LocationServices.GeofencingApi.addGeofences(_googleApiClient, geofenceRequest, pi); -- 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 a topic in the Google Groups Android Developers group. To unsubscribe from this topic, visit https://groups.google.com/d/topic/android-developers
[android-developers] Google Play Services Geofence Problem
I wrote an app that uses location services. It creates a geofence around my house and lets my app know when I come home. I am doing this in a service in the background so that my app doesn't have to be the active app to function. I was using the LocationManager api. I have a Samsung Galaxy Note 2 with Android 4.1 on it. The app was working perfectly. I upgrade the phone to Android 4.3 because it just became available. Now all of a sudden my app started getting notifications that I was outside of the geofence when I was still inside and not even really moving. I did some searching and saw a video presentation from the Google IO conference in 2013. It talked about the new Google Play Services (at the time new) and all the great stuff they were doing with location. I decided to switch to that because it seemed like a better way to go. When I studied the api I found that even the stuff in that video was deprecated and there was newer stuff. I got excited thinking it would solve my problem of accuracy. I just finished implementing my app using the Google Play services Geofencing. Guess what? I have the same problem. I put in some logging and basically here is what happens: I use the Fusion request for location updates to figure out where I am. I first look for an accuracy of 10 meters for at least 5 samples. This is done because my radius is 80 meters, so I have to have a high accuracy when starting out. Once I get that I turn OFF the location updates and set up the geofence. I use the location of my house that was previously gathered from a mapping piece of my app with a radius of 80 meters. I would like to be able to go down to 20 meters if I can get it working, but 80 for now. When I first create the geofence I get 2 notifications right away. The accuracy on those events is 3.8 meters. I then let the app sit for about a minute. At that point I then get 2 more transition events. Both of them say I am outside of the geofence. The accuracy on these events is 2373 meters. I can only assume that after a minute the api has switched to a lower accuracy system for some reason. I then walked at least 80 meters away from my house and I never got any more transition events at all. The question is what do I do about it? My app is even still the active app, so this is not a background issue. I assume it might even be worse if I was in the background. I have requested the highest accuracy. I have heard people say that the answer to this problem is to leave a location update request going. Doesn't the defeat the whole purpose of letting the api take over for us? Shouldn't I be able to say I need high accuracy geofencing and the api just takes care of it? Here are some snippets from my code: public synchronized void buildGoogleApiClient() { _googleApiClient = new GoogleApiClient.Builder(_context) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .addApi(LocationServices.API) .build(); } Geofence geofence = new Geofence.Builder() .setRequestId(door.Id) .setTransitionTypes(Geofence.GEOFENCE_TRANSITION_ENTER | Geofence.GEOFENCE_TRANSITION_EXIT) .setCircularRegion(door.Latitude, door.Longitude, door. ActivationDistance) .setExpirationDuration(Geofence.NEVER_EXPIRE) .build(); GeofencingRequest geofenceRequest = new GeofencingRequest.Builder() .addGeofence(geofence) .setInitialTrigger(door.IsInside ? GeofencingRequest. INITIAL_TRIGGER_ENTER : GeofencingRequest.INITIAL_TRIGGER_EXIT) .build(); LocationServices.GeofencingApi.addGeofences(_googleApiClient, geofenceRequest, pi); -- 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 and stop receiving emails from it, send an email to android-developers+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
[android-developers] Re: Bluetooth Low Energy support on lollipop and previous
My mistake in choosing words. I didn't set a max, it is the target that I set. The IDE also suggests putting the suppress tag on the method, but I have never been a fan of suppressing warnings or errors. If this is the accepted way to do it, however, then I will follow it. Thanks! On Thursday, January 29, 2015 at 7:09:08 AM UTC-7, MathieuB wrote: You shouldn't set a max sdk. You can set minSdk to 18, and targetSdk to 21. If you set a max, that means if there's a new android version, people won't be able to download your app, you'll have to make an update. As for the error you get, it's mainly a lint error. If the code is in an if statement like you showed, there's no reason someone with API 18 enters into this if statement. You'll just have to add @SuppressLint(NewApi) before your method. Have a look at this stackoverflow page, it'll help. http://stackoverflow.com/questions/11592820/writing-backwards-compatible-android-code -- 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 and stop receiving emails from it, send an email to android-developers+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
[android-developers] Re: Bluetooth Low Energy support on lollipop and previous
Thank you for the quick reply. I am running into a problem with the bluetooth le stuff specically, however. I tried this: if (android.os.Build.VERSION.SDK_INT = Build.VERSION_CODES.LOLLIPOP) { mBluetoothLeScanner = mBluetoothAdapter.getBluetoothLeScanner(); } I have the min version for my application set to 18 and the max to 21. On the getBluetoothLeScanner call I get an error that my min sdk version is only 18 and needs to be 21. This is my whole problem how do I support 21 bluetooth and = 21 bluetooth calls at the same time? On Wednesday, January 28, 2015 at 6:58:10 PM UTC-7, MathieuB wrote: According to the official documentation : You can use Android 5.0 APIs while also supporting older versions by adding conditions to your code that check for the system API level before executing APIs not supported by your minSdkVersion https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#min. To learn more about maintaining backward compatibility, read Supporting Different Platform Versions https://developer.android.com/training/basics/supporting-devices/platforms.html . Example with honeycomb : // Make sure we're running on Honeycomb or higher to use ActionBar APIs if (Build.VERSION.SDK_INT = Build.VERSION_CODES.HONEYCOMB) { ActionBar actionBar = getActionBar(); actionBar.setDisplayHomeAsUpEnabled(true); } In your case : if (android.os.Build.VERSION.SDK_INT = Build.VERSION_CODES.LOLLIPOP) -- 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 and stop receiving emails from it, send an email to android-developers+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
[android-developers] Bluetooth Low Energy support on lollipop and previous
I have an app that currently supports bluetooth low energy on pre-lollipop. I am using things like startLeScan to do the central role. I noticed that Lollipop introduces new apis and that the old ones are deprecated. I am having one problem in particular that may be related. When I call startLeScan with no UUIDs it finds my devices. If I pass in the UUID of the same device that it found it doesn't work. This works fine on a pre-lollipop device. Could this be that the api is deprecated and I need to use the new startScan on lollipop? If that is the case how do I do this in the same application? When I browse to the documentation on the web site for startScan it warns me that it is only available in SDK 21. Does this mean if I use it then my app won't work on pre- SDK 21 devices or does the sdk take care of that for me? Sorry to seem like a noob, but this is the first time I have encountered something like this. -- 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 and stop receiving emails from it, send an email to android-developers+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Re: [android-developers] Yet another case of not getting BTLE notifications
I figured this out and hope some of you are going to laugh. I did not understand the way this all works. Keep in mind that I already implemented all of this for iOS, so some of my thinking is influenced by the way iOS does things. On iOS the same callback is used for the response to a read request and the response to an update notification for data. Getting a change in a characteristic value is handled the same. Any time it changes whether that is from a Read or a Notification it comes in the same iOS callback. I assumed Android was the same way. So I was expecting to get my data update in the onCharacteristicRead response. Those who have experience with all of this probably know right off that notification updates come in the onCharacteristicChanged callback. Once I added that everything is now working. On Mon, Dec 8, 2014 at 11:13 PM, Tony Pitman t...@shatalmic.com wrote: I have read several posting on this same thing and tried all of the suggestions. I am able to discover and connect to my BTLE device (it is actually an iOS device). My Android device is 4.4 and has BTLE. After I connect and get all the services and characteristics I try to read the one I am using and it works fine. If I update the value on the iOS device and do another read I get the new value as I would expect. I use this code: protected static final UUID CHARACTERISTIC_UPDATE_NOTIFICATION_DESCRIPTOR_UUID = UUID.fromString( 2902--1000-8000-00805f9b34fb); if (gatt.setCharacteristicNotification(characteristic, true)) { BluetoothGattDescriptor descriptor = characteristic.getDescriptor(CHARACTERISTIC_UPDATE_NOTIFICATION_DESCRIPTOR_UUID); if (descriptor != null) { descriptor.setValue(enabled ? BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE : BluetoothGattDescriptor.DISABLE_NOTIFICATION_VALUE); if (gatt.writeDescriptor(descriptor)) { // success } else { // failed } } } It reaches the // success line so it seems to be doing what I want I just never get the notifications. I know that this characteristic I am trying to subscribe to has the notification flag set on it. I do that in the iOS application. Unless something is going wrong there I guess. How can I debug this to figure out what is going on? Should I get something in the onDescriptor callback maybe? Where do I look and how do I diagnose? -- 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 a topic in the Google Groups Android Developers group. To unsubscribe from this topic, visit https://groups.google.com/d/topic/android-developers/qwALaq3SwuQ/unsubscribe . To unsubscribe from this group and all its topics, send an email to android-developers+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout. -- 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 and stop receiving emails from it, send an email to android-developers+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
[android-developers] Re: Yet another case of not getting BTLE notifications
I figured this out and hope some of you are going to laugh. I did not understand the way this all works. Keep in mind that I already implemented all of this for iOS, so some of my thinking is influenced by the way iOS does things. On iOS the same callback is used for the response to a read request and the response to an update notification for data. Getting a change in a characteristic value is handled the same. Any time it changes whether that is from a Read or a Notification it comes in the same iOS callback. I assumed Android was the same way. So I was expecting to get my data update in the onCharacteristicRead response. Those who have experience with all of this probably know right off that notification updates come in the onCharacteristicChanged callback. Once I added that everything is now working. On Monday, December 8, 2014 11:13:45 PM UTC-7, Tony Pitman wrote: I have read several posting on this same thing and tried all of the suggestions. I am able to discover and connect to my BTLE device (it is actually an iOS device). My Android device is 4.4 and has BTLE. After I connect and get all the services and characteristics I try to read the one I am using and it works fine. If I update the value on the iOS device and do another read I get the new value as I would expect. I use this code: protected static final UUID CHARACTERISTIC_UPDATE_NOTIFICATION_DESCRIPTOR_UUID = UUID.fromString( 2902--1000-8000-00805f9b34fb); if (gatt.setCharacteristicNotification(characteristic, true)) { BluetoothGattDescriptor descriptor = characteristic.getDescriptor(CHARACTERISTIC_UPDATE_NOTIFICATION_DESCRIPTOR_UUID); if (descriptor != null) { descriptor.setValue(enabled ? BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE : BluetoothGattDescriptor.DISABLE_NOTIFICATION_VALUE); if (gatt.writeDescriptor(descriptor)) { // success } else { // failed } } } It reaches the // success line so it seems to be doing what I want I just never get the notifications. I know that this characteristic I am trying to subscribe to has the notification flag set on it. I do that in the iOS application. Unless something is going wrong there I guess. How can I debug this to figure out what is going on? Should I get something in the onDescriptor callback maybe? Where do I look and how do I diagnose? -- 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 and stop receiving emails from it, send an email to android-developers+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Re: [android-developers] Re: onCharacteristicWrite Error Status 14
I appreciate you finding this. I agree with your comment, however, whatever the heck that is. Now what? On Tue, Dec 9, 2014 at 8:05 AM, Streets Of Boston flyingdutc...@gmail.com wrote: I found this one here: https://android.googlesource.com/platform/external/bluetooth/bluedroid/+/android-4.3_r1.1/stack/include/gatt_api.h It seems 14 means GATT_ERR_UNLIKELY, whatever that is ... On Monday, December 8, 2014 11:34:30 PM UTC-5, Tony Pitman wrote: I am writing an Android app and using api 18 to do BTLE. I am able to connect, discover services and characteristics and read the characteristic from the peripheral. When I try to write using WriteCharacterstic I get the onCharacteristicWrite, but the status is 14. I can't find this status anywhere in the documentation or anywhere else. The value does not make it to the peripheral. Can someone tell me what this code means and why the value might not be writing? -- 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 a topic in the Google Groups Android Developers group. To unsubscribe from this topic, visit https://groups.google.com/d/topic/android-developers/_yYrmCXkQbM/unsubscribe . To unsubscribe from this group and all its topics, send an email to android-developers+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout. -- 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 and stop receiving emails from it, send an email to android-developers+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
[android-developers] onCharacteristicWrite Error Status 14
I am writing an Android app and using api 18 to do BTLE. I am able to connect, discover services and characteristics and read the characteristic from the peripheral. When I try to write using WriteCharacterstic I get the onCharacteristicWrite, but the status is 14. I can't find this status anywhere in the documentation or anywhere else. The value does not make it to the peripheral. Can someone tell me what this code means and why the value might not be writing? -- 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 and stop receiving emails from it, send an email to android-developers+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
[android-developers] Yet another case of not getting BTLE notifications
I have read several posting on this same thing and tried all of the suggestions. I am able to discover and connect to my BTLE device (it is actually an iOS device). My Android device is 4.4 and has BTLE. After I connect and get all the services and characteristics I try to read the one I am using and it works fine. If I update the value on the iOS device and do another read I get the new value as I would expect. I use this code: protected static final UUID CHARACTERISTIC_UPDATE_NOTIFICATION_DESCRIPTOR_UUID = UUID.fromString( 2902--1000-8000-00805f9b34fb); if (gatt.setCharacteristicNotification(characteristic, true)) { BluetoothGattDescriptor descriptor = characteristic.getDescriptor(CHARACTERISTIC_UPDATE_NOTIFICATION_DESCRIPTOR_UUID); if (descriptor != null) { descriptor.setValue(enabled ? BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE : BluetoothGattDescriptor.DISABLE_NOTIFICATION_VALUE); if (gatt.writeDescriptor(descriptor)) { // success } else { // failed } } } It reaches the // success line so it seems to be doing what I want I just never get the notifications. I know that this characteristic I am trying to subscribe to has the notification flag set on it. I do that in the iOS application. Unless something is going wrong there I guess. How can I debug this to figure out what is going on? Should I get something in the onDescriptor callback maybe? Where do I look and how do I diagnose? -- 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 and stop receiving emails from it, send an email to android-developers+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
[android-developers] Formatting Hand Coded Fragment in Parent View
I am writing a component for Unity3D. I am asking this question here because I think it is more of an Android question than a Unity3D question. Unity3D allows developers to write what are called Plugins. Unity has its own Activity that the app runs in. A plugin can interact with that activity. The Unity activity has a ViewGroup and View in it with a canvas. I want to add a new View into the ViewGroup of Unity. I want this new view to be centered on the screen and not cover up any of the existing canvas except for where it lives in the middle of the screen. I figure it will take about the full width and about 1/4 of the center of the screen. The question is how to do this. Currently I am using a Fragment because the view I am trying to insert must be used as a Fragment. This Fragment shows up and works just fine. I can see the UI. The problem is it completely covers the Unity activity window. There are a couple things to note about the code below. Thanks to other developers for the code to find the Unity View. I have to set the Id of the leaf view because it is -1 if I don't. Maybe that is part of the problem. Maybe I am getting the wrong view? My Fragment does show up, so I think I will need to use some kind of Layout and set the settings on it. If that is the way, please point me to the way to do that. Again, I want my Fragment view to float on top of the Unity view and be centered on the screen taking of the full width, but not height. Here is the code I have so far that shows the fragment, but covers the whole screen: private View getLeafView(View view) { if (view instanceof ViewGroup) { ViewGroup vg = (ViewGroup)view; for (int i = 0; i vg.getChildCount(); ++i) { View chview = vg.getChildAt(i); View result = getLeafView(chview); if (result != null) return result; } return null; } else { return view; } } public void Init(String videoId, String objectName, int heightOffset) { UnityPlayer.currentActivity.runOnUiThread(new Runnable() { public void run() { ViewGroup rootView = (ViewGroup)UnityPlayer.currentActivity.findViewById(android.R.id.content); // find the first leaf view (i.e. a view without children) // the leaf view represents the topmost view in the view stack View topMostView = getLeafView(rootView); if (topMostView != null) { // let's add a sibling to the leaf view ViewGroup leafParent = (ViewGroup)topMostView.getParent(); if (leafParent != null) { leafParent.setId(0x20348); MyFragment fragment = new MyFragment(); FragmentManager fragmentManager = UnityPlayer.currentActivity.getFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.add(leafParent.getId(), fragment); fragmentTransaction.commit(); } } } }); } -- 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 and stop receiving emails from it, send an email to android-developers+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Re: [android-developers] Re: GPS Background Service Stops Receiving Updates
Thank you everyone for the replies. Here are my responses: I am holding the home button and the list of apps comes up and I swipe away my app to kill it. This is what others have mentioned above. I don't know if this is samsung only or not. Maybe this method is supposed to kill all running services and processes of the app and is not a good way to test. I tried giving the service a different process. I tried 2 things. First I just added the android:process tag to my service. I gave it a name with the ':' in front so it would be private to my app. This did not change anything. The service still dies when I kill the app. The other thing I noticed is when I go to the Settings - Application Manager - Running I see my app. If I tap on it to see what it is doing I get the following sections / information: Active App: MyApp 1 process and 1 service Services: MyService Start by application Processes: MyApp com.mycompany.myappspace:MyService Main process in use. So I decided to try adding the android:process section to the main application entry in the xml as well. I gave it a different name just in case. I called it MyApp instead of MyService. This did not make any difference. The information shown in the settings panel were the same. So am I to assume that the service is running in the same process as the app so that when I kill the app using the method above that is why the service is also dying? Is killing the app that way the wrong way to test? The whole reason I am doing this is because originally I just put my gps stuff inside the app itself. I would start my app and then many hours later I would enter the geofence area I had set up and the app did not trigger what I wanted it to do. I would go to the app and it looked like it was starting all over. Maybe I should just start my app and let it run for several hours and see if the service keeps going. Thanks for all the help. On Monday, November 24, 2014 7:58:36 AM UTC-7, Mukesh Srivastav wrote: As my understanding here, the service was stopped some where in the code and hence it is behaving like that. On Mon, Nov 24, 2014 at 7:38 PM, Mark Phillips ma...@phillipsmarketing.biz javascript: wrote: On my Samsung Galaxy 4 phone from T-Mobile, I can hold down the home button and get a list of running apps. I can kill each one individually with a swipe, and there is a trashcan icon at the bottom of the screen that will kill all the apps running. I use this feature to extend my battery time when the batter is getting low. It may be a special Samsung app that does this. Mark On Mon, Nov 24, 2014 at 1:13 AM, gjs garyjam...@gmail.com javascript: wrote: Hi, What do you mean by - ...I test this by holding down the home button and killing my app ? If I start an app, then press hold down the Home button, the app that was running is sent to the background (not killed) the only option that appears is a circle that pops up to run Google Now - if I then swipe upwards. There is no option to kill any apps via the Home button interaction you described as far as I know, I tested this on (stock) Nexus 5 with Android 5 as well as Sony Xperia 2 with Android 4.4 phone devices. The only (stock) standard way I know to kill apps is via Android Settings-Apps-Downloaded-(select App)-Press 'Force stop' button. I'd suggest you try in the service manifest entry android:exported=true if that is ok for your app. Other things to try are android:process also make sure you are using startForeground(..) stopForeground(.) calls in your service or it will be killed by the OS after a period of time and finally you probably need to use a wake lock to keep the CPU running when the display is turned off. I use these settings to get a GPS (background) Service to continue to run ok indefinitely after the uses exits my app or presses the home button or turns the screen off. (But be warned that these actions can deplete the device battery fairly quickly which many users do not like). The user can still always kill the app background service even when the app is stopped / service in the background via Android Settings-Apps-Downloaded-(select App)-Press 'Force stop', there is nothing your app can do to avoid this... Regards On Sunday, November 23, 2014 5:44:45 PM UTC+11, Tony Pitman wrote: I am writing an app that needs to get gps location information in the background. I created a class derived from Service to do this. I copied the example on the Android developer site about making a background service. It uses the ServiceHandler thread to do the work. I use location manager and set up the receiving of updates. I have my main activity create the service using the normal way like this: Intent intent = new Intent(_context, MyService.class); _context.startService(intent); Inside my service I create the location manager and start getting location updates. This works
Re: [android-developers] Re: GPS Background Service Stops Receiving Updates
It looks like calling startForeground was the key. I am still not able to kill the app using the method mentioned above, but at least now when I let the app sit for a long period of time the GPS notifications keep coming into the service even when it looks like the app has been shut down by the OS for lack of use. I do have another related question. When I did my service I was following the example of a service on the google dev site. This is the link to what I followed: http://developer.android.com/guide/components/services.html You will notice about the middle of the page there is the example code that I followed and then modified. They use a HandlerThread to create the Looper that gets used in the mServiceHandler thread to process the actual work. They pass in a parameter to that HandlerThread called Process.THREAD_PRIORITY_BACKGROUND. Is this different than using the startForeground that now fixed my issue? I left that HandlerThread the way it was and it now works with the startForeground. Thanks! On Monday, November 24, 2014 8:17:18 AM UTC-7, Tony Pitman wrote: Thank you everyone for the replies. Here are my responses: I am holding the home button and the list of apps comes up and I swipe away my app to kill it. This is what others have mentioned above. I don't know if this is samsung only or not. Maybe this method is supposed to kill all running services and processes of the app and is not a good way to test. I tried giving the service a different process. I tried 2 things. First I just added the android:process tag to my service. I gave it a name with the ':' in front so it would be private to my app. This did not change anything. The service still dies when I kill the app. The other thing I noticed is when I go to the Settings - Application Manager - Running I see my app. If I tap on it to see what it is doing I get the following sections / information: Active App: MyApp 1 process and 1 service Services: MyService Start by application Processes: MyApp com.mycompany.myappspace:MyService Main process in use. So I decided to try adding the android:process section to the main application entry in the xml as well. I gave it a different name just in case. I called it MyApp instead of MyService. This did not make any difference. The information shown in the settings panel were the same. So am I to assume that the service is running in the same process as the app so that when I kill the app using the method above that is why the service is also dying? Is killing the app that way the wrong way to test? The whole reason I am doing this is because originally I just put my gps stuff inside the app itself. I would start my app and then many hours later I would enter the geofence area I had set up and the app did not trigger what I wanted it to do. I would go to the app and it looked like it was starting all over. Maybe I should just start my app and let it run for several hours and see if the service keeps going. Thanks for all the help. On Monday, November 24, 2014 7:58:36 AM UTC-7, Mukesh Srivastav wrote: As my understanding here, the service was stopped some where in the code and hence it is behaving like that. On Mon, Nov 24, 2014 at 7:38 PM, Mark Phillips ma...@phillipsmarketing.biz wrote: On my Samsung Galaxy 4 phone from T-Mobile, I can hold down the home button and get a list of running apps. I can kill each one individually with a swipe, and there is a trashcan icon at the bottom of the screen that will kill all the apps running. I use this feature to extend my battery time when the batter is getting low. It may be a special Samsung app that does this. Mark On Mon, Nov 24, 2014 at 1:13 AM, gjs garyjam...@gmail.com wrote: Hi, What do you mean by - ...I test this by holding down the home button and killing my app ? If I start an app, then press hold down the Home button, the app that was running is sent to the background (not killed) the only option that appears is a circle that pops up to run Google Now - if I then swipe upwards. There is no option to kill any apps via the Home button interaction you described as far as I know, I tested this on (stock) Nexus 5 with Android 5 as well as Sony Xperia 2 with Android 4.4 phone devices. The only (stock) standard way I know to kill apps is via Android Settings-Apps-Downloaded-(select App)-Press 'Force stop' button. I'd suggest you try in the service manifest entry android:exported=true if that is ok for your app. Other things to try are android:process also make sure you are using startForeground(..) stopForeground(.) calls in your service or it will be killed by the OS after a period of time and finally you probably need to use a wake lock to keep the CPU running when the display is turned off. I use these settings to get a GPS (background) Service to continue to run ok indefinitely after the uses exits my
[android-developers] GPS Background Service Stops Receiving Updates
I am writing an app that needs to get gps location information in the background. I created a class derived from Service to do this. I copied the example on the Android developer site about making a background service. It uses the ServiceHandler thread to do the work. I use location manager and set up the receiving of updates. I have my main activity create the service using the normal way like this: Intent intent = new Intent(_context, MyService.class); _context.startService(intent); Inside my service I create the location manager and start getting location updates. This works great so far. I am doing this as a service because I want my service to receive updates even if my application is shut down. I test this by holding down the home button and killing my app. The problem is that as soon as I kill my app the service stops getting updates. The service does not go away, as far as I can tell, it just quits receiving GPS updates. As long as I leave the app running, even in the background, the service keeps getting the GPS updates. Can someone tell me how to continue to get GPS updates in my service even if the app that started it gets killed? I have some settings in my AndroidManifest.xml that might be affecting it. I have the service set up so it is not exported and has permissions. I do this because I don't want other applications to use my service. Could these be affecting it? Here is my service entry in the xml: service android:name=com.mycompany.mypackage.MyService android:permission=com.mycompany.MY_SERVICE android:exported=false / Just after that outside of the application tag I have this: permission android:name=com.mycompany. MY_SERVICE/ uses-permission android:name=com.mycompany. MY_SERVICE / -- 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 and stop receiving emails from it, send an email to android-developers+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
[android-developers] adb forward tcp=38300 tcp=38300 error: cannot bind to socket
I have a tablet (Galaxy Note 10.1) and Windows 7. I have been doing dev just fine on it. I have executed this command: adb forward tcp=38300 tcp=38300 many times and it has been working. I can't think of anything that has changed except that I have not worked on this for about a week. Now all of a sudden I get: error: cannot bind to socket I have tried rebooting, adb kill-server, there is nothing else running on that port that I can find. I do the adb forward --list and it shows nothing. I can't figure this out. Can anyone please help? I am desperate. I need to get this working again to finish my project. I have tried other ports with no luck. As I said this worked a week ago just fine and nothing has changed that I know of. The only thing is maybe the latest Microsoft patches did something? Thanks... -- 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 and stop receiving emails from it, send an email to android-developers+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: [android-developers] adb forward tcp=38300 tcp=38300 error: cannot bind to socket
Duh, figured it out. It is supposed to be tcp: not tcp=. Sorry to be so stupid. Too many projects in too many languages... On Thu, Sep 19, 2013 at 9:44 PM, Tony Pitman t...@shatalmic.com wrote: I have a tablet (Galaxy Note 10.1) and Windows 7. I have been doing dev just fine on it. I have executed this command: adb forward tcp=38300 tcp=38300 many times and it has been working. I can't think of anything that has changed except that I have not worked on this for about a week. Now all of a sudden I get: error: cannot bind to socket I have tried rebooting, adb kill-server, there is nothing else running on that port that I can find. I do the adb forward --list and it shows nothing. I can't figure this out. Can anyone please help? I am desperate. I need to get this working again to finish my project. I have tried other ports with no luck. As I said this worked a week ago just fine and nothing has changed that I know of. The only thing is maybe the latest Microsoft patches did something? Thanks... -- 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 a topic in the Google Groups Android Developers group. To unsubscribe from this topic, visit https://groups.google.com/d/topic/android-developers/qJia_CTS6hk/unsubscribe . To unsubscribe from this group and all its topics, send an email to android-developers+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out. -- 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 and stop receiving emails from it, send an email to android-developers+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.