tag:blogger.com,1999:blog-19883546382223800142024-02-08T08:21:51.505-05:00andrewoidAndrewhttp://www.blogger.com/profile/00430767807875969833noreply@blogger.comBlogger18125tag:blogger.com,1999:blog-1988354638222380014.post-35760624623832483672009-05-04T15:31:00.002-05:002009-05-04T15:50:45.451-05:00The Setting is Mightier than the SwordYesterday I updated my phone to Cupcake.<br />Before I did I bought a used White G1 off of craigslist for $180, so I could root and hack one phone in peace, and still have a stock version of the OS to test on on the other. <br /><br />I followed <a href="http://forum.xda-developers.com/showthread.php?t=442480">these</a> instructions on how to gain root, and then updated to <a href="http://jf.andblogs.net/">JesusFreke 1.5</a>. Go donate to the guy he does good work.<br /><br />It was a very satisfying, and nerve racking. But I'm now able to play with full cupcake before most other people.<br /><br />A list of my impressions will be for another post, but now I want to continue talking about the whole settings mess that is Cupcake.<br /><br />Final Answer - it's "mostly" way overblown.<br /><br />The major problem, that sparked this whole mess was GPS. You don't want programs turning GPS On/Off whenever they want. It was bad when it was discovered, and it still is. Google, in making their changes, wanted to force any location aware app to have the user do it. This is very simple from a programming perspective actually. And you can immediately take the user to the page in the settings app that turns location services on/off. My guess is that the power drain from the GPS receiver is a lot. And this was the only fair way to do it. A few other ideas have been proposed, but this is by far the easiest for them to implement.<br /><br />The problem is the collateral damage. What other settings are going to suffer from this. <br /><br />Wifi, still works. That was always part of the API.<br />Bluetooth, still works. This surprised me until I recompiled ToggleBlu today and tested it on my phone, it works under 1.5, even though it's a hack, even though it's using a hidden API. All bluetooth users can relax.<br />2G/3G, never worked anyway.<br />Airplane Mode, still works.<br /><br />I suspect those are the major settings that people were using settings apps to change. <br /><br />Brightness. OK this is one that IS still editable, but I haven't figured out exactly how just yet. I know it's editable because Toggle Settings has released a cupcake version that can change it. I am working on a few theories. <br /><br />I now have a "real" website! <br /><a href="http://www.andrewoid.net">www.andrewoid.net</a>Andrewhttp://www.blogger.com/profile/00430767807875969833noreply@blogger.com29tag:blogger.com,1999:blog-1988354638222380014.post-68351582480958133072009-04-30T11:48:00.003-05:002009-04-30T11:57:19.533-05:00Cupcake, the oncomming storm.With Cupcake, Google closed a hole that allowed some devs to make some really good apps.<br /><br />Many settings can no longer be directly manipulated in code. So far hat is on the list is: Screen Brightness, GPS, Bluetooth.<br /><br />Truth is, we should never have messed with these settings in the first place. To do this we had to access APIs that were not public. Google told us not to in fact. But people (like myself) built programs that manipulated these settings, and these programs were celebrated in the community as being very useful.<br /><br />Some companies abused some settings. Skyhook, a location API encorporated into a few popular applications (ShopSavvy) was manipulating the WiFi and GPS settings without user knowledge. This is a huge mistake which got them some very bad press and may have been one of the main reasons for this change. <br /><br />I have no problem with Google removing access to these settings, but at least put something more controllable in it's place. Instead Google removed access to settings and have left no other option than to go into the Settings application and change it manually. And in doing so, over 100,000 of my active installs (ToggleBlu, FastBright, ToggleGPS) will disappear over night.Andrewhttp://www.blogger.com/profile/00430767807875969833noreply@blogger.com9tag:blogger.com,1999:blog-1988354638222380014.post-23586733382018146142009-03-29T10:07:00.004-05:002009-03-30T23:53:55.139-05:00Bar ControlIf you want better icons, email me an icon. Should be 48x48 pixel PNG24 format.<br /><br />Changelog<br /><br />v1.1.0<br />-Changed "Application Launcher" to "Main Application"<br />-Added the ability to specify if apps are shown first or last in the notification bar.<br /><br />v1.0.0<br /><br />-Notifications are no longer "On going" events, so that new notifications show up above Bar Control apps<br />-Changes made to the way Bar Control stores notifications. I'm now using a database like I should<br />-Ability to hide Notification Icons until the window shade is pulled down (Thanks MikeDG). This may have side effects because I am doing something the API was never meant to do.<br />- Clear all notifications button.<br />- Added Donate ButtonAndrewhttp://www.blogger.com/profile/00430767807875969833noreply@blogger.com1tag:blogger.com,1999:blog-1988354638222380014.post-32693810955735520322009-03-08T12:14:00.002-05:002009-03-08T12:22:22.732-05:00SMSAwakeI run my phone in silent mode most of the time. Especially if I'm working. I put my phone on my desk within my field of view. I suppose I could have it notify me on vibrate or a sound, but that often gets really annoying when I'm having a SMS conversation with someone. <br /><br />I don't get a lot of calls. When I do the screen lights up. However, there is no automatic wakeup of the phone when a txt message arrives. Funny as this might sound it took me forever to realize that a green LED light meant I had an SMS, and even then I still don't notice it so easily when I'm working. One of the features I missed about my old phone was that the screen lit up when I had a txt message.<br /><br />So I built one. Took me all of 15 minutes. <br /><br />One of my requirements about this app was that it was a "set it and forget it" app. I install it, and it starts working. There is no app to run, nothing to configure. It just works. This is one reason I didn't use SMSPopup. No offense to the developer(s) of that popular app. And I just don't want my SMS to pop up for everyone to see like that. <br /><br />And when I release an app to the Market, the Market never disappoints. Some people get it and some people don't. <br /><br />I put in capital letters in the app description "THIS IS NOT A PROGRAM THAT YOU RUN." And I still get comments like "App doesn't launch. Uninstalled" with one star rating.Andrewhttp://www.blogger.com/profile/00430767807875969833noreply@blogger.com2tag:blogger.com,1999:blog-1988354638222380014.post-29581299273064474982009-02-27T15:15:00.003-05:002009-03-01T03:26:08.949-05:00ToggleWifi Changelogv1.2<br /><br />When the app is first run it now asks if you want to enable/disable the notification. If you decide to change your mind, you need to uninstall and reinstall.<br /><br />v1.1.0<br /><br />Update adds a notification when WiFi is turned on but you are NOT connected to a network.Andrewhttp://www.blogger.com/profile/00430767807875969833noreply@blogger.com6tag:blogger.com,1999:blog-1988354638222380014.post-53553851368297240382009-02-27T15:00:00.005-05:002009-03-01T03:27:09.485-05:00FastBright Changelogv1.2<br /><br />Update now asks if you want to enable/disable the notification when the app is first run after install. If you want to change your preference then you need to uninstall and reinstall.<br /><br />v1.1<br /><br />Added a notification icon when brightness is turned on. This allows you disable brightness even when you're inside an application.Andrewhttp://www.blogger.com/profile/00430767807875969833noreply@blogger.com1tag:blogger.com,1999:blog-1988354638222380014.post-20132372719892785382009-02-23T17:13:00.006-05:002009-03-01T15:55:21.474-05:00HideNSeek Changelog<a href="http://www.cyrket.com/package/com.schwimmer.android.hidenseek">Cyrket Link</a><br /><br />0.91 BETA<br />The speed of previews have been increased.<br />Overall memory consumption due to images was slashed. This was causing a majority of crashes. I just didn't understand how best to load large images.<br />Added "Hide All" and "Show All" buttons. <br />Added close button on the main screen to remind users to close. As of right now everything I've done to try to get the app to reset correctly have failed.<br /><br />0.9.4 BETA<br />Fixed issue where hitting the back button at the flashlight screen could cause the program to go straight into the file manager bypassing the password screen. OOPS.<br /><br />0.9.3 BETA<br />Program was loading full sized images as previews and then scaling them down to 48x48 pixels when displayed. The full sized images were staying in memory. The program was using up too much memory which resulted in a lot of the crashes that were reported. Most people reported this problem when trying to open images taken with the camera. This is significant because when I tested it I only tested it with images I put on my phone, not in the Camera directory. Those images have a resolution about 2048x1536. The images I tested with were much smaller. An update in the future needs to optimize preview loading even further.Andrewhttp://www.blogger.com/profile/00430767807875969833noreply@blogger.com3tag:blogger.com,1999:blog-1988354638222380014.post-4656242660160447732009-02-19T23:49:00.003-05:002009-02-19T23:56:44.725-05:00T-Mobile UK's Top 10 Downloaded Android AppsHere's a flattering <a href="http://androidcommunity.com/top-10-uk-android-market-apps-revealed-by-t-mobile-20090217/">list</a>.<br /><br />"T-Mobile UK have released a list of the top ten most popular Android applications, as downloaded to the T-Mobile G1 by users in the UK.<br /><br />...<br /><br />9. Save MMS – Allows users to save images, video or audio from MMS text messages directly to the G1’s memory card"<br /><br />It's great to be included and this news was echoed on a few of the other Android websites. However, none of them have a link to the ACTUAL press release! I'm at a loss to explain this. Perhaps it was something at MWC (Mobile World Congress) which happened over the last few days. I have no idea. There's nothing about this on T-Mobile UK's website, if anyone has any information on this please let me know.Andrewhttp://www.blogger.com/profile/00430767807875969833noreply@blogger.com0tag:blogger.com,1999:blog-1988354638222380014.post-77045162127995857212009-02-04T12:18:00.003-05:002009-02-06T11:05:33.614-05:00The WinZip ProblemAt some point <a href="http://www.winzip.com/">WinZip</a> was on every Windows computer I sat at. It needed to be, because that was the only way to handle .zip files. Windows did not have built in handling of zips. <br /><br />These days you don't find WinZip installed. Once Windows added zip support, there wasn't a reason to manually download it. This has happened many times. Microsoft blew Netscape out of the water by putting Internet Explorer on everyone's desktops. Microsoft made Lotus obsolete with Excel. Google made MapQuest a joke with Google Maps. AOL, once the mighty dialup ISP was made inconsequential by the market. At first it was Friendster, then it was MySpace and now it's Facebook. <br /><br />With the <a href="http://forums.t-mobile.com/tmbl/board/message?board.id=87&thread.id=30897">announcement</a> of RC33 which I spoke about in my last post, Google has made the first shot, which might turn out to be the last shot on a very new industry with their introduction of <a href="http://www.google.com/latitude/intro.html">Google Latitude</a>. <br /><br />This service will most likely crush <a href="http://www.loopt.com/">Loopt</a> and other Location Mapping services that have sprung up in the last few months. Google's introduction into this market is going to make their services second class. It's a shame, but it's not unexpected. There are many natural services that fit into Google Maps. An interesting tidbit, as far as Loopt goes, is that they were using Google Maps as their mapping engine. <br /><br />It's happened before, and it will happen again. If your application isn't legally protectable, if it gets large enough, one day someone will just put you out of business.Andrewhttp://www.blogger.com/profile/00430767807875969833noreply@blogger.com1tag:blogger.com,1999:blog-1988354638222380014.post-32605891041041578932009-02-04T11:49:00.002-05:002009-02-04T12:18:19.024-05:00This Party's OverWith <a href="http://forums.t-mobile.com/tmbl/board/message?board.id=87&thread.id=30897">this</a> much expected announcement, my "Save MMS" application is officially obsolete.<br /><br />Surprised it took them this long for such a needed feature.<br /><br />To date that little utility has been downloaded over 150,000 times and as of this morning cracked the top 10 application on the Android Market. To copy the listing from <a href="http://www.cyrket.com/">cyrket</a> as of right now it's:<br /><br /><br />The Weather Channel<br />ShopSavvy - Big in Japan, Inc.<br />MySpace Mobile<br />US Yellow Pages Search<br />DailyHoroscope - Max Binshtok<br />Backgrounds - Stylem Media<br />Free Dictionary Org -Baris Efe<br />Ringdroid - Ringdroid Team<br />Movies and Showtimes - Stylem Media<br />Save MMS - Me<br /><br />Success tastes kinda good.<br /><br />Since I released that app and started talking about it I've had more than a few friends/family lament at how I should've charged for it. Had I waited around for Google to allow paid apps on the Market I would've missed the opportunity. And there are more important things to gain from this than just money.Andrewhttp://www.blogger.com/profile/00430767807875969833noreply@blogger.com3tag:blogger.com,1999:blog-1988354638222380014.post-67734935943448586632009-01-11T20:56:00.003-05:002009-01-11T21:07:28.997-05:00Getting on T-Mobile's RadarI had a legitimate reason to call T-Mobile technical support. I had a very technical question regarding the limits of their Edge/3G network. They couldn't answer my question. They couldn't even direct me to a department that could answer my question. But while I had them on the phone I couldn't help myself.<br /><br />"I have a question. If I receive an MMS message, how can I save the attachment?" I asked him innocently.<br />"Oh, go onto the market and download a program called 'Save MMS'", he told me without any hesitation.<br />I laughed, I told him the truth. I told him I was the developer who wrote "Save MMS" and I was wondering if T-Mobile technical support had heard about it and was recommending it. <br />"How'd you hear about it?"<br />"We got an email about it."<br />"Can I get a copy of that email?" It was a long shot, but I had to take it.<br />"Sorry, I don't have it anymore. But it was from a higher up so it must've been official. "<br /><br />He thanked me for writing the program. I can only imagine how many times those poor T-Mobile tech support people have had to tell people there was no way to do it, or to forward it to their email. <br /><br />Never had someone tell me to download my own program before.Andrewhttp://www.blogger.com/profile/00430767807875969833noreply@blogger.com3tag:blogger.com,1999:blog-1988354638222380014.post-86277141133297513612008-12-28T10:32:00.002-05:002008-12-28T13:34:08.205-05:0050,000On Friday, a week after I released it "Save MMS" passed the 50,000 download mark. Not bad for such a small app. Unfortunately I was too sick to enjoy it. I got a stomach virus and spent Friday and most of Saturday weak and in terrible pain. <br /><br />The world has a balance apparently.Andrewhttp://www.blogger.com/profile/00430767807875969833noreply@blogger.com8tag:blogger.com,1999:blog-1988354638222380014.post-81776479292637587422008-12-21T11:35:00.002-05:002008-12-21T11:36:22.938-05:00Name changeI decided to change the name of my blog from mylifeonandroid.blogspot.com to andrewoid.blogspot.com because there is already a blog called mylifewithandroid.blogspot.comAndrewhttp://www.blogger.com/profile/00430767807875969833noreply@blogger.com1tag:blogger.com,1999:blog-1988354638222380014.post-65403561505350036752008-12-21T09:17:00.003-05:002008-12-21T10:09:17.396-05:00Closed API, Open System.The "SMS problem" on Android currently is that you can send and receive MMS messages, but there is no interface to save what you receive to the sd card. This is a very laughable oversight by the dev team for version 1. Something that I can't believe is still a problem months after launch. <br /><br />I fully expected the Android Market community to solve this problem eventually. However there was one main obstacle in their way. <br /><br />If you looked at the <a href="http://code.google.com/android/reference/index.html">Android API reference</a> you won't see any mention of MMS messages. Even if you search for MMS you find 4 results, none of which show you in code how to access them. SMS is a little better it. There is at least code to send SMS messages. But the whole thing is limited in scope. <br /><br />However, applications such as MyBackup and Txtract are able to access text messages. In the case of MyBackup it is also able to backup MMS messages. It's a good program. They both are. And when I looked at them I was amazed to see that while they were able to get "underneath" the API and access data the API never intended neither of them thought to solve the "SMS Problem". MyBackup gets close. It saves the attachments but doesn't do it in a way that allows the phone to then access it easily. <br /><br />So I decided I was going to tackle the "SMS Problem". <br /><br />My first thought was the the <a href="http://code.google.com/android/reference/android/telephony/gsm/SmsManager.html">SmsManager</a> class had some hidden functionality that was missing from the API. No such luck. <br /><br />I poked around the <a href="http://source.android.com/">Android Source</a> for a while. This yielded a ton of information, none of it distinct on how to solve the problem. I happened upon a post somewhere online which gave code that used a <a href="http://code.google.com/android/reference/android/content/ContentResolver.html">ContentResolver</a> to query a http://code.google.com/android/reference/android/net/Uri.html, to return a <a href="http://code.google.com/android/reference/android/database/Cursor.html">Cursor</a> object that could then be used to access the messages. Ah ha!<br /><br />Wait a minute what does all that mean?<br /><br /><a href="http://www.faqs.org/rfcs/rfc2396.html">URI</a> stands for <a href="http://en.wikipedia.org/wiki/Uniform_Resource_Identifier">Uniform Resource Identifier</a> (Go read that first link I dare ya). They are strings in a certain format that define a resource. A <a href="http://en.wikipedia.org/wiki/Uniform_Resource_Locator">URL</a>s, that address at the top of web browsers are a class of URIs. <br /><br />A <a href="http://code.google.com/android/reference/android/database/Cursor.html">Cursor</a> is the object used to access data (like that stored in a database) which is organized in columns and rows. <br /><br />And a <a href="http://code.google.com/android/reference/android/content/ContentResolver.html">ContentResolver</a> is a "class (that) provides applications access to the content model."<br /><br />In short. You make a database query, using a string to find the data that isn't talked about anywhere in the android reference. <br /><br />How that's done is talked about <a href="http://code.google.com/android/devel/data/contentproviders.html">here</a>.<br /><br />So armed with this knowledge, the "special" URI, I was able to create "Save MMS". And solve the "SMS Problem" I estimate at least 2 months ahead of <a href="http://source.android.com/roadmap/cupcake">cupcake</a> being pushed out to T-Mobile customers.<br /><br />Is this good or bad? I'm not really sure. There was no documentation for what I was doing. I had to drudge through it and even when I thought I had something working some users are still encountering problems. I'm assuming this is due to different phone sending MMS with different metadata. I simply did not have enough information to write clean enough code for this.Andrewhttp://www.blogger.com/profile/00430767807875969833noreply@blogger.com21tag:blogger.com,1999:blog-1988354638222380014.post-50059339855813274662008-12-18T12:28:00.003-05:002008-12-18T12:41:50.662-05:00Reflection cont.In a previous post I laid out a scheme for using reflection to turn GPS on and off and update the providers.<br /><br /><br /><br />That didn't work in the end because of this error.<br /><br />...<br />W/System.err( 415): Caused by: java.lang.SecurityException: Permission Denial: getIntentSender() from pid=415, uid=10023 is not allowed to send as package android<br />...<br /><br />So how do you tell android to update the providers? Well you use a communication mechanism called an <a href="http://code.google.com/android/reference/android/content/Intent.html">Intent</a>. <br /><br />I'm not sold on this tech idea. And android is built on it. To update the providers it just takes 2 lines of code.<br /><br />Intent intent = new Intent( Intent.ACTION_PROVIDER_CHANGED );<br />sendBroadcast(intent);<br /><br />Easy? yes. But I hate it. <br /><a href="http://code.google.com/android/reference/android/content/Intent.html#ACTION_PROVIDER_CHANGED">Intent.ACTION_PROVIDER_CHANGED</a> is a constant String "android.intent.action.PROVIDER_CHANGED". Intents can be any String + more data. And you'll only know if what you wrote should work is at runtime. I hate it because these things aren't checked at compile time where in my opinion it should be. If you're calling standard Intents its fairly, but other people's Intents or your own Intents make life harder because it's not always discernible in code what the strings should be and what the extra data should be. <br /><br />I'm not sold on it, and it's all over the API. I have the same problem with URIs, but that will be for yet another post.Andrewhttp://www.blogger.com/profile/00430767807875969833noreply@blogger.com74tag:blogger.com,1999:blog-1988354638222380014.post-81187009290128515592008-12-11T11:23:00.004-05:002008-12-11T11:50:29.565-05:0010,000 downloadsThis morning ToggleWifi passed 10,000 downloads. That number to me is a little staggering considering that until now the code that I've written has only been used by the companies I've work for. <br /><br />Certainly that alone gives me motivation to keep producing anything that comes to mind. The comments and emails I have received have also been overwhelming. But what really gets me is seeing my apps mentioned elsewhere.<br /><br />I couldn't help doing a google search for "togglewifi android".<br /><br /><a href="http://www.paxmodept.com/telesto/blogitem.htm?id=727">Here</a> is someone who mentions my apps (ToggleWifi and ToggleBlu) as two of his most favorite.<br /><a href="http://androidcommunity.com/forums/f12/togglewifi-app-8887/">Here</a> is a thread on AndroidCommunity.com discussing ToggleWifi.<br /><a href="http://www.myphone.gr/forum/showthread.php?p=2607874">Here</a> my app is mentioned in... whatever language that is.<br /><a href="http://frostykillz.wordpress.com/2008/12/11/android-market-toggle-gps-toggle-wifi-toggle-bluetooth/">Here</a> which has a small mention of me by full name.Andrewhttp://www.blogger.com/profile/00430767807875969833noreply@blogger.com3tag:blogger.com,1999:blog-1988354638222380014.post-14080603872198355392008-12-10T16:43:00.002-05:002008-12-10T17:06:31.455-05:00Reflection ContinuedIn addiction to being somewhat messy, reflection can be used in dangerous ways. Remember you are using code in which the programmer never intended. Sometimes this can result in humorous things (see <a href="http://blogs.csoonline.com/how_to_crash_an_in_flight_entertainment_system">Crashing an in flight entertainment system</a>). Sometimes your great plans can go down in flames.<br /><br />Looking through the source code of the Android platform (which can be downloaded very easily from <a href="http://source.android.com/download">here</a> if you have a mac or linux computer), you can find out how to do things that are not in the standard source. In this case I was looking for how to enable/disable GPS for my ToggleGPS app. <br /><br />You can see the code for the Security and Location settings screen <a href="http://android.git.kernel.org/?p=platform/packages/apps/Settings.git;a=blob_plain;f=src/com/android/settings/SecuritySettings.java;hb=HEAD">here</a>.<br /><br />It's not for the faint of heart. I wouldn't suggest doing this except for experienced developers because a lot of times you encounter code and terminology that you haven't seen before.<br /><br />All the magic of enabling GPS happens with this line<br /><br /> // Inform the location manager about the changes<br /> mLocationManager.updateProviders();<br /><br />However, if you check out the Android SDK reference for <a href="http://code.google.com/android/reference/android/location/LocationManager.html">LocationManager</a> you find out that there isn't an updateProviders() method.<br /><br />It's private, it's hidden. How google is calling it here I'm not really sure. We can get the LocationManager in our code by <br /><br /> LocationManager locationManager = <br /> (LocationManager) getSystemService(Context.LOCATION_SERVICE);<br /><br />And as I showed in my last post you can access "hidden" methods using reflection.<br /><br /> Method updateProvidersMethod = <br /> locationManager.getClass().getMethod("updateProviders");<br /> updateProvidersMethod.setAccessible(true);<br /> updateProvidersMethod.invoke(locationManager);<br /><br />But...<br /><br />Under the hood things are not as they seem. If you try to run this in code in the emulator you get a very strange exception. Buried in the stack trace you find:<br /><br />...<br />W/System.err( 415): Caused by: java.lang.SecurityException: Permission Denial:<br />getIntentSender() from pid=415, uid=10023 is not allowed to send as package andr<br />oid<br />...<br /><br />Now I didn't bother looking through the Android code to figure out what is going on under the hood, but the message "not allowed to send as package android" stopped me in my tracks. You can use reflection to trick java into doing what you want it to do but this you can't trick. I'm guessing, but the error message probably means that I was trying to access operating system protected code. <br /><br />But there ARE apps in the Android Market that can do this. But how?<br /><br />The answer to this is surprisingly simple. But that is for another post.Andrewhttp://www.blogger.com/profile/00430767807875969833noreply@blogger.com3tag:blogger.com,1999:blog-1988354638222380014.post-40914697968964108252008-12-09T23:51:00.005-05:002008-12-10T00:16:51.332-05:00Hacking the "Private" Android APISo Android doesn't allow you to interact with Bluetooth. The functionality exists, however developers can't access it... or can they?<br /><br />There are many apps on the Android Market that toggle Bluetooth. So if Google doesn't give developers the ability how do they do it? The answer is an advanced Java concept called Reflection (http://java.sun.com/docs/books/tutorial/reflect/).<br /><br />The idea is that even if you don't know what object you are using, you can find out information about it and then use that information to call methods that you otherwise shouldn't know about it. <br /><br />The way this works is that Google is doing something strange.<br />In order access most services on Android you call the Context.getSystemService() method passing in a string signifying the service you want to access. You won't find this information in the API but if you pass the string, "bluetooth" you are returned an object whose class isn't in the standard API. This is the Bluetooth Manager. However the class is generic, it's of type Object. <br /><br />But now you can use Reflection to find it's methods.<br /><br />Object manager = getSystemService("bluetooth");<br />Class c = manager.getClass();<br />Method enable = c.getMethod("enable");<br />enable.setAccessible(true);<br />enable.invoke(manager);<br /><br />... and then you've enabled Bluetooth.<br /><br />Instead of "enable" you can put the name of any other method of the Bluetooth Manager class. You can get a list of all the methods by calling getMethods().<br /><br />It's not an efficient way to program, it definitely doesn't produce nice and clear code. But it's a very valuable tool to know.Andrewhttp://www.blogger.com/profile/00430767807875969833noreply@blogger.com6