Archive

Archive for March, 2013

Nokia Remote Device Access now includes Windows Phone 8

Screen shot 2013-03-25 at 20.32.54Nokia’s Remote Device Access service, which allows you to remotely connect to hundreds of Nokia phones, now includes Nokia Lumia 620, a Windows 8 Phone.

This is particularly useful if you find that the Simulator doesn’t suit your needs, or is too slow. Unfortunately this device is in high demand, so you may need to request your reservation a few times, but It looks well.

 

Screen shot 2013-03-25 at 20.35.22

Categories: Uncategorized

Emulate mobile devices in chrome without extensions

mobile emulation chrome

A very simple way to emulate mobile browsers within chrome, is to press F12, then the Settings cog in the bottom right hand corner. then press “Overrides”, and you can modify the user agent, screen resolution.

Here you can also override geo location, orientation, and even preview CSS as a printer.

No extensions to install!

– Although don’t expect this to be anywhere near as authentic as using a emulator or real device. It’s a good start, that’s all.

Categories: Uncategorized

Mobile Resolutions by popularity

Mobile screen size by popularity

Mobile screen size by popularity

If you are designing an app or mobile website, for a wide variety of mobile devices then obviously you should design your app or webpage to stretch or shrink to any size, but realistically, how small or large should you go.

From a sample of 3,000 mobile users in February/March 2013 , I calculated the 10 most popular screen resolutions, and it looks like 320×480 is the most popular, with only 7% requiring screen sizes less than 480 pixels.

 

 

Categories: Uncategorized

JQM Navbar iconpos ignored – fix

I noticed that in Jquery Mobile, the iconpos (icon position) property is ignored, and the icon is always placed at the top.

Here is a two-line javascript fix to this problem:

$(“#contentsNavbar a”).removeClass(“ui-btn-icon-top”);
$(“#contentsNavbar a”).addClass(“ui-btn-icon-left”);

I’ve read that this issue will be fixed in future versions of Jquery Mobile, but In case you don’t want to wait or upgrade, this fix should do.

Categories: Uncategorized

Enable USB debugging on Nook without Rooting

 
13-03-13-9

One of the bugbears of developing for a Nook, is that as soon as you plug the USB cable into the device,  the screen freezes, with a message saying that it is in “USB Drive mode” and not to disconnect the cable, etc.

Unfortunately, this makes it impossible to interact with your app without unplugging the USB, and therefore loosing the ability to debug the app live.

So, using the technique, of pressing the “n” key, then apps, then Volume up and the “//Library” logo (top of screen) at the same time, press Nook Color Tools and then All Settings then Development, then Check USB Debugging and uncheck Automount.

Then if you connect the Nook to your computer, (with appropriate driver installed), the USB drive screen no longer appears. Connect using ADB kill-server, ADB devices, then you can do an ADB logcat live, and see the messages fly up the screen, as you debug your app.

 

 

Here’s the output from my logcat screen, as I tried using one of my apps live on the Nook

n=false mHomePressed=false
D/WindowManager( 958): interceptKeyTi code=24 down=true repeatCount=0 keyguardOn=false mHomePressed=false
D/WindowManager( 958): interceptKeyTi code=24 down=true repeatCount=0 keyguardOn=false mHomePressed=false
D/WindowManager( 958): interceptKeyTi code=24 down=true repeatCount=0 keyguardOn=false mHomePressed=false
D/WindowManager( 958): interceptKeyTi code=24 down=true repeatCount=0 keyguardOn=false mHomePressed=false
D/WindowManager( 958): interceptKeyTi code=24 down=true repeatCount=0 keyguardOn=false mHomePressed=false
D/WindowManager( 958): interceptKeyTi code=24 down=true repeatCount=0 keyguardOn=false mHomePressed=false
D/WindowManager( 958): interceptKeyTi code=24 down=true repeatCount=0 keyguardOn=false mHomePressed=false
D/WindowManager( 958): interceptKeyTi code=24 down=true repeatCount=0 keyguardOn=false mHomePressed=false
D/WindowManager( 958): interceptKeyTi code=24 down=true repeatCount=0 keyguardOn=false mHomePressed=false
D/WindowManager( 958): interceptKeyTi code=24 down=true repeatCount=0 keyguardOn=false mHomePressed=false
I/ActivityManager( 958): Starting activity: Intent { cmp=com.bn.nook.applauncher/.jump.JumpActivity }
D/WindowManager( 958): interceptKeyTi code=24 down=true repeatCount=0 keyguardOn=false mHomePressed=false
D/WindowManager( 958): interceptKeyTi code=24 down=true repeatCount=0 keyguardOn=false mHomePressed=false
D/WindowManager( 958): interceptKeyTi code=24 down=true repeatCount=0 keyguardOn=false mHomePressed=false
D/WindowManager( 958): interceptKeyTi code=24 down=true repeatCount=0 keyguardOn=false mHomePressed=false
D/WindowManager( 958): interceptKeyTi code=24 down=true repeatCount=0 keyguardOn=false mHomePressed=false
D/WindowManager( 958): interceptKeyTi code=24 down=true repeatCount=0 keyguardOn=false mHomePressed=false
D/WindowManager( 958): interceptKeyTi code=24 down=true repeatCount=0 keyguardOn=false mHomePressed=false
I/SurfaceFlinger( 958):
I/SurfaceFlinger( 958): SurfaceFlinger::createSurface() : layer->mIdentity=9, LayerName= com.bn.nook.applauncher/com.bn.nook.applauncher.jump.JumpActivity
I/SurfaceFlinger( 958): SurfaceFlinger::createSurface() : layer->clientIndex=0, surfaceHandle->mToken=0x0
I/SurfaceFlinger( 958):
I/SurfaceFlinger( 958): SurfaceFlinger::createSurface() : layer->mIdentity=10,LayerName= com.bn.nook.applauncher/com.bn.nook.applauncher.jump.JumpActivity
I/SurfaceFlinger( 958): SurfaceFlinger::createSurface() : layer->clientIndex=1, surfaceHandle->mToken=0x1
D/WindowManager( 958): interceptKeyTi code=24 down=false repeatCount=0 keyguardOn=false mHomePressed=false
I/SurfaceFlinger( 958):
I/SurfaceFlinger( 958): SurfaceFlinger::createSurface() : layer->mIdentity=11,LayerName= DimSurface
I/SurfaceFlinger( 958): SurfaceFlinger::createSurface() : layer->clientIndex=0, surfaceHandle->mToken=0x0
D/dalvikvm( 1510): GC_EXTERNAL_ALLOC freed 1555 objects / 97664 bytes in 66ms
I/ActivityManager( 958): Displayed activity com.bn.nook.applauncher/.jump.JumpActivity: 505 ms (total 505 ms)
D/Omap3ALSA( 903): open called for devices 00000002 in mode 0…
E/ALSAControl( 903): Control ‘HandsfreeR Switch’ cannot get element info: -2
E/ALSAControl( 903): Control ‘HandsfreeL Switch’ cannot get element info: -2
E/ALSAControl( 903): Control ‘HandsfreeR Mux’ cannot get element info: -2
E/ALSAControl( 903): Control ‘HandsfreeL Mux’ cannot get element info: -2
E/ALSAControl( 903): Control ‘HeadsetR Mixer AudioR2’ cannot get element info:-2
E/ALSAControl( 903): Control ‘HeadsetL Mixer AudioL2’ cannot get element info:-2
I/Omap3ALSA( 903): Initialized ALSA PLAYBACK device default
D/dalvikvm( 1510): GC_EXTERNAL_ALLOC freed 2709 objects / 127576 bytes in 37ms
W/InputManagerService( 958): Starting input on non-focused client com.android.internal.view.IInputMethodClient$Stub$Proxy@4a2edb28 (uid=10025 pid=1265)
W/IInputConnectionWrapper( 1265): showStatusIcon on inactive InputConnection
D/dalvikvm( 1510): GC_EXTERNAL_ALLOC freed 2686 objects / 149856 bytes in 105ms
D/dalvikvm( 1510): GC_EXTERNAL_ALLOC freed 270 objects / 12872 bytes in 35ms
D/dalvikvm( 1510): GC_EXTERNAL_ALLOC freed 19 objects / 1136 bytes in 34ms
D/dalvikvm( 1510): GC_EXTERNAL_ALLOC freed 23 objects / 792 bytes in 32ms
D/dalvikvm( 1510): GC_EXTERNAL_ALLOC freed 27 objects / 1168 bytes in 31ms
D/dalvikvm( 1510): GC_EXTERNAL_ALLOC freed 40 objects / 1712 bytes in 44ms
D/dalvikvm( 1040): GC_EXPLICIT freed 690 objects / 38984 bytes in 84ms
D/WifiService( 958): ACTION_BATTERY_CHANGED pluggedType: 0
D/dalvikvm( 1092): GC_EXPLICIT freed 7998 objects / 419912 bytes in 748ms
I/dalvikvm( 958): Jit: resizing JitTable from 8192 to 16384
D/dalvikvm( 1265): GC_EXPLICIT freed 2771 objects / 256992 bytes in 98ms
I/ActivityManager( 958): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.benhirashima.nookcolorsettings/.NCSettings }
I/SurfaceFlinger( 958):
I/SurfaceFlinger( 958): SurfaceFlinger::createSurface() : layer->mIdentity=12,LayerName= Starting com.benhirashima.nookcolorsettings
I/SurfaceFlinger( 958): SurfaceFlinger::createSurface() : layer->clientIndex=0, surfaceHandle->mToken=0x0
I/ActivityManager( 958): Start proc com.benhirashima.nookcolorsettings for activity com.benhirashima.nookcolorsettings/.NCSettings: pid=1524 uid=10007 gids={}
I/WindowManager( 958): Setting rotation to 3, animFlags=1
I/ActivityManager( 958): Config changed: { scale=1.0 imsi=0/0 loc=en_US touch=3 keys=1/1/2 nav=1/1 orien=2(-1) layout=35 uiMode=0 seq=2}
I/SurfaceFlinger( 958):
I/SurfaceFlinger( 958): SurfaceFlinger::createSurface() : layer->mIdentity=13,LayerName= com.benhirashima.nookcolorsettings/com.benhirashima.nookcolorsettings.NCSettings
I/SurfaceFlinger( 958): SurfaceFlinger::createSurface() : layer->clientIndex=0, surfaceHandle->mToken=0x0
I/ActivityManager( 958): Displayed activity com.benhirashima.nookcolorsettings/.NCSettings: 718 ms (total 718 ms)
W/ActivityManager( 958): Unable to launch app com.google.android.apps.genie.geniewidget/10020 for broadcast Intent { act=android.appwidget.action.APPWIDGET_UPDATE cmp=com.google.android.apps.genie.geniewidget/.miniwidget.MiniWidgetProvider (has extras) }: process is bad
W/ActivityManager( 958): finishReceiver called but none active
I/ActivityManager( 958): Starting activity: Intent { act=android.intent.action.CHOOSER cmp=android/com.android.internal.app.ChooserActivity (has extras) }
I/SurfaceFlinger( 958):
I/SurfaceFlinger( 958): SurfaceFlinger::createSurface() : layer->mIdentity=14,LayerName= android/com.android.internal.app.ChooserActivity
I/SurfaceFlinger( 958): SurfaceFlinger::createSurface() : layer->clientIndex=1, surfaceHandle->mToken=0x1
D/dalvikvm( 958): GC_EXPLICIT freed 10940 objects / 689032 bytes in 124ms
I/ActivityManager( 958): Displayed activity android/com.android.internal.app.ChooserActivity: 927 ms (total 927 ms)
I/WindowManager( 958): Setting rotation to 0, animFlags=0
I/ActivityManager( 958): Config changed: { scale=1.0 imsi=0/0 loc=en_US touch=3 keys=1/1/2 nav=1/1 orien=1(-1) layout=35 uiMode=0 seq=3}
I/UsageStats( 958): Unexpected resume of android while already resumed in android
D/dalvikvm( 1524): GC_FOR_MALLOC freed 4797 objects / 301576 bytes in 97ms
I/SurfaceFlinger( 958):
I/SurfaceFlinger( 958): SurfaceFlinger::createSurface() : layer->mIdentity=15,
LayerName= android/com.android.internal.app.ChooserActivity
I/SurfaceFlinger( 958): SurfaceFlinger::createSurface() : layer->clientIndex=1, surfaceHandle->mToken=0x1
I/SurfaceFlinger( 958):
I/SurfaceFlinger( 958): SurfaceFlinger::createSurface() : layer->mIdentity=16,
LayerName= com.benhirashima.nookcolorsettings/com.benhirashima.nookcolorsettings.NCSettings
I/SurfaceFlinger( 958): SurfaceFlinger::createSurface() : layer->clientIndex=0, surfaceHandle->mToken=0x0
D/WifiService( 958): ACTION_BATTERY_CHANGED pluggedType: 0
I/ActivityManager( 958): Starting activity: Intent { act=android.intent.action.MAIN flg=0x3000000 pkg=com.android.settings cmp=com.android.settings/.DevelopmentSettings }
D/dalvikvm( 958): GC_EXPLICIT freed 2743 objects / 128840 bytes in 141ms
I/SurfaceFlinger( 958):
I/SurfaceFlinger( 958): SurfaceFlinger::createSurface() : layer->mIdentity=17,LayerName= com.android.settings/com.android.settings.DevelopmentSettings
I/SurfaceFlinger( 958): SurfaceFlinger::createSurface() : layer->clientIndex=0,
surfaceHandle->mToken=0x0
W/IInputConnectionWrapper( 1524): showStatusIcon on inactive InputConnection
I/ActivityManager( 958): Displayed activity com.android.settings/.DevelopmentSe
ttings: 720 ms (total 720 ms)
D/DevelopementSettings( 1236): Old UMSAuto status: true
D/DevelopementSettings( 1236): Dev Auto Mount Checked? false
D/DevelopementSettings( 1236): New UMSAuto status: false
D/dalvikvm( 1331): GC_EXPLICIT freed 6052 objects / 504504 bytes in 157ms
I/SurfaceFlinger( 958):
I/SurfaceFlinger( 958): SurfaceFlinger::createSurface() : layer->mIdentity=18,
LayerName= com.benhirashima.nookcolorsettings/com.benhirashima.nookcolorsettings
.NCSettings
I/SurfaceFlinger( 958): SurfaceFlinger::createSurface() : layer->clientIndex=0,
surfaceHandle->mToken=0x0
W/InputManagerService( 958): Starting input on non-focused client com.android.i
nternal.view.IInputMethodClient$Stub$Proxy@4a33bbd0 (uid=1000 pid=1236)
D/WindowManager( 958): interceptKeyTi code=4 down=true repeatCount=0 keyguardOn
=false mHomePressed=false
D/WindowManager( 958): interceptKeyTi code=4 down=false repeatCount=0 keyguardO
n=false mHomePressed=false
I/SurfaceFlinger( 958):
I/SurfaceFlinger( 958): SurfaceFlinger::createSurface() : layer->mIdentity=19,
LayerName= com.bn.nook.library/com.bn.nook.library.LibraryMainActivity
I/SurfaceFlinger( 958): SurfaceFlinger::createSurface() : layer->clientIndex=0,
surfaceHandle->mToken=0x0
D/dalvikvm( 1265): GC_FOR_MALLOC freed 7701 objects / 432968 bytes in 59ms
I/dalvikvm( 1265): Jit: resizing JitTable from 4096 to 8192
D/dalvikvm( 1236): GC_EXPLICIT freed 3797 objects / 509904 bytes in 103ms
I/DeviceManagerHandler( 1290): HandleMessage(): msg.what (8)
D/dalvikvm( 1382): GC_EXPLICIT freed 1201 objects / 75632 bytes in 75ms
I/MountService( 958): onUmsConnected(): UMS mount state [UMS_STATE_MOUNTED]
I/MountService( 958): onUmsConnected(): => all is OK; Starting UMS
W/Vold ( 899): Ignoring unknown switch ‘usb_configuration’
D/WifiService( 958): ACTION_BATTERY_CHANGED pluggedType: 0
D/dalvikvm( 1399): GC_EXPLICIT freed 1140 objects / 81360 bytes in 88ms
D/WifiService( 958): ACTION_BATTERY_CHANGED pluggedType: 0
D/dalvikvm( 1415): GC_EXPLICIT freed 2261 objects / 164816 bytes in 116ms
D/WifiService( 958): ACTION_BATTERY_CHANGED pluggedType: 0
D/WindowManager( 958): interceptKeyTi code=24 down=true repeatCount=0 keyguardO
n=false mHomePressed=false
I/SurfaceFlinger( 958):
I/SurfaceFlinger( 958): SurfaceFlinger::createSurface() : layer->mIdentity=20,
LayerName= Toast
I/SurfaceFlinger( 958): SurfaceFlinger::createSurface() : layer->clientIndex=0,
surfaceHandle->mToken=0x0
D/WindowManager( 958): interceptKeyTi code=24 down=true repeatCount=0 keyguardO
n=false mHomePressed=false
D/WindowManager( 958): interceptKeyTi code=24 down=true repeatCount=0 keyguardO
n=false mHomePressed=false
D/WindowManager( 958): interceptKeyTi code=24 down=true repeatCount=0 keyguardO
n=false mHomePressed=false
D/WindowManager( 958): interceptKeyTi code=24 down=true repeatCount=0 keyguardO
n=false mHomePressed=false
D/WindowManager( 958): interceptKeyTi code=24 down=true repeatCount=0 keyguardO
n=false mHomePressed=false
D/WindowManager( 958): interceptKeyTi code=24 down=true repeatCount=0 keyguardO
n=false mHomePressed=false
D/WindowManager( 958): interceptKeyTi code=24 down=true repeatCount=0 keyguardO
n=false mHomePressed=false
D/WindowManager( 958): interceptKeyTi code=24 down=true repeatCount=0 keyguardO
n=false mHomePressed=false
D/WindowManager( 958): interceptKeyTi code=24 down=true repeatCount=0 keyguardO
n=false mHomePressed=false
I/ActivityManager( 958): Starting activity: Intent { cmp=com.bn.nook.applaunche
r/.jump.JumpActivity }
D/WindowManager( 958): interceptKeyTi code=24 down=true repeatCount=0 keyguardO
n=false mHomePressed=false
I/SurfaceFlinger( 958):
I/SurfaceFlinger( 958): SurfaceFlinger::createSurface() : layer->mIdentity=21,
LayerName= com.bn.nook.applauncher/com.bn.nook.applauncher.jump.JumpActivity
I/SurfaceFlinger( 958): SurfaceFlinger::createSurface() : layer->clientIndex=0,
surfaceHandle->mToken=0x0
D/WindowManager( 958): interceptKeyTi code=24 down=true repeatCount=0 keyguardO
n=false mHomePressed=false
D/WindowManager( 958): interceptKeyTi code=24 down=true repeatCount=0 keyguardO
n=false mHomePressed=false
D/WindowManager( 958): interceptKeyTi code=24 down=true repeatCount=0 keyguardO
n=false mHomePressed=false
D/WindowManager( 958): interceptKeyTi code=24 down=true repeatCount=0 keyguardO
n=false mHomePressed=false
D/WindowManager( 958): interceptKeyTi code=24 down=false repeatCount=0 keyguard
On=false mHomePressed=false
W/InputManagerService( 958): Starting input on non-focused client com.android.i
nternal.view.IInputMethodClient$Stub$Proxy@4a2edb28 (uid=10025 pid=1265)
I/ActivityManager( 958): Displayed activity com.bn.nook.applauncher/.jump.JumpA
ctivity: 445 ms (total 445 ms)
D/dalvikvm( 1092): GC_EXPLICIT freed 3941 objects / 187536 bytes in 100ms
I/ActivityManager( 958): Starting activity: Intent { act=android.intent.action.
MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.openmerchanta
ccount.internetradio/.App }
I/SurfaceFlinger( 958):
I/SurfaceFlinger( 958): SurfaceFlinger::createSurface() : layer->mIdentity=22,
LayerName= Starting com.openmerchantaccount.internetradio
I/SurfaceFlinger( 958): SurfaceFlinger::createSurface() : layer->clientIndex=0,
surfaceHandle->mToken=0x0
I/ActivityManager( 958): Start proc com.openmerchantaccount.internetradio for a
ctivity com.openmerchantaccount.internetradio/.App: pid=1542 uid=10060 gids={100
6, 3003, 1015}
D/dalvikvm( 902): GC_EXPLICIT freed 277 objects / 10528 bytes in 200ms
D/dalvikvm( 902): GC_EXPLICIT freed 42 objects / 1832 bytes in 80ms
I/System.out( 1542): loadUrl(file:///android_asset/www/index.html)
I/System.out( 1542): url=file:///android_asset/www/index.html baseUrl=file:///an
droid_asset/www
D/dalvikvm( 902): GC_EXPLICIT freed 2 objects / 64 bytes in 72ms
I/SurfaceFlinger( 958):
I/SurfaceFlinger( 958): SurfaceFlinger::createSurface() : layer->mIdentity=23,
LayerName= com.openmerchantaccount.internetradio/com.openmerchantaccount.interne
tradio.App
I/SurfaceFlinger( 958): SurfaceFlinger::createSurface() : layer->clientIndex=0,
surfaceHandle->mToken=0x0
W/InputManagerService( 958): Starting input on non-focused client com.android.i
nternal.view.IInputMethodClient$Stub$Proxy@4a2ee150 (uid=10051 pid=1510)
I/ActivityManager( 958): Displayed activity com.openmerchantaccount.internetrad
io/.App: 763 ms (total 763 ms)
D/dalvikvm( 1510): GC_EXPLICIT freed 1174 objects / 58456 bytes in 94ms
D/dalvikvm( 1265): GC_EXPLICIT freed 3007 objects / 212752 bytes in 116ms
D/WifiService( 958): ACTION_BATTERY_CHANGED pluggedType: 0
D/WifiService( 958): ACTION_BATTERY_CHANGED pluggedType: 0
D/WifiService( 958): ACTION_BATTERY_CHANGED pluggedType: 0
D/WifiService( 958): ACTION_BATTERY_CHANGED pluggedType: 0
I/power ( 958): *** set_screen_state 0
E/SurfaceFlinger( 958): About to give-up screen, flinger = 0x134968
E/SurfaceFlinger( 958): Waiting on mBarrier…
E/SurfaceFlinger( 958): Woke up!
D/WifiService( 958): ACTION_SCREEN_OFF
D/WifiService( 958): setting ACTION_DEVICE_IDLE timer for 900000ms
D/DeviceManagerBroadcastReceiver( 1290): action (android.intent.action.SCREEN_OF
F)
D/WifiService( 958): acquireWifiLockLocked: WifiLock{DeviceManagerService type=
1 binder=android.os.BinderProxy@4a3d9c38}
E/DeviceInfo( 1290): Calling deviceinfo.getDeviceId
I/DeviceManagerHandler( 1290): HandleMessage(): msg.what (102)
I/DeviceManagerHandler( 1290): User is not using the device!
D/DeviceManagerHandler( 1290): HandleMessage(): Not ready to install!
D/WifiService( 958): releaseWifiLockLocked: WifiLock{DeviceManagerService type=
1 binder=android.os.BinderProxy@4a3d9c38}
D/StatusBar( 958): DISABLE_EXPAND: yes
D/StatusBar( 958): DISABLE_NOTIFICATION_ICONS: yes
I/SurfaceFlinger( 958):
I/SurfaceFlinger( 958): SurfaceFlinger::createSurface() : layer->mIdentity=24,
LayerName= Keyguard
I/SurfaceFlinger( 958): SurfaceFlinger::createSurface() : layer->clientIndex=0,
surfaceHandle->mToken=0x0
D/GoogleLoginService( 1109): onBind: Intent { act=android.accounts.AccountAuthen
ticator cmp=com.google.android.gsf/.loginservice.GoogleLoginService }
D/dalvikvm( 1109): GC_EXPLICIT freed 3749 objects / 185400 bytes in 87ms
D/dalvikvm( 1306): GC_EXPLICIT freed 2694 objects / 146856 bytes in 117ms
D/WifiService( 958): ACTION_BATTERY_CHANGED pluggedType: 0
D/dalvikvm( 1236): GC_EXPLICIT freed 590 objects / 36328 bytes in 81ms
E/TalkProvider( 1109): replaceContactWithContactId: contactId==0!!! fiach.reid@g
mail.com, acct=1
E/TalkProvider( 1109): insert presence failed for account=1 username=fiach.reid@
gmail.com client_type=2 status= priority=0 mode=4
D/WifiService( 958): ACTION_BATTERY_CHANGED pluggedType: 0
D/WifiService( 958): ACTION_BATTERY_CHANGED pluggedType: 0

Categories: Uncategorized

Sideload APK on Nook without Rooting

13-03-13-7

These instructions are for a Nook Color 1.4.3, It may work on other Nooks, feel free to comment if it differs on your device.

First, Press the “n” key, and press apps

Press the Volume up key and the “// Library” logo at the top of the screen, you should move to the “Extras” page.

Press “Nook Color Tools”.

Double check the “Allow Non Market Apps”

– From here, I was able to download an APK via DropBox, and install it… No more installing APKs via ADB 🙂

 

 

 

 

 

Categories: Uncategorized

Android app crashes on launch

This is probably the first mistake that any Android developer makes, so seasoned developers will know this issue very well:

Three things MUST match on your android app:

The App.Java file, should take the following format:

package com.openmerchantaccount.ruby;
import android.webkit.WebSettings;

import android.app.Activity;
import android.os.Bundle;
import com.phonegap.*;

public class App extends DroidGap {

Your package name will be different, but I’m highlighting the important bit.

Then in the Android Manifest the (AndroidManifest.xml) should start as follows:

<?xml version=”1.0″ encoding=”utf-8″?>
<manifest xmlns:android=”http://schemas.android.com/apk/res/android&#8221;
package=”com.openmerchantaccount.ruby
android:versionCode=”2″
android:versionName=”2″>

and end as follows:

<activity android:name=”com.openmerchantaccount.ruby.App
android:label=”@string/app_name”
android:configChanges=”orientation|keyboardHidden”
>
<intent-filter>
<action android:name=”android.intent.action.MAIN” />
<category android:name=”android.intent.category.LAUNCHER” />
</intent-filter>
</activity>

</application>
</manifest>

If any of the three class names do not match, the app will crash on startup.

 

 

Categories: Uncategorized

Nook Color 1.4.3 pre-installed apps

After finally getting ADB working and connected to my Nook, I decided to take a look at the ‘Bloatware’ that was already pre-installed;

 

C:\android\adt-bundle-windows-x86\sdk\platform-tools>adb shell
# pm list packages -f
pm list packages -f

package:/system/app/BnPolicyManagerSvc.apk = com.bn.policymanager.svc
package:/system/app/DefaultContainerService.apk = com.android.defcontainer
package:/system/app/Launcher2.apk = com.android.launcher
package:/system/app/HomeCatcher2_1.apk = com.gojimi.homecatcher
package:/system/app/Gallery.apk = com.bn.nook.gallery
package:/system/app/QuickSearchBox.apk = com.android.quicksearchbox
package:/system/app/TouchCalibrator.apk = com.bn.touchcalibrator
package:/system/app/DRPReader.apk = com.bn.nook.drpreader
package:/system/app/MarketUpdater.apk = com.android.vending.updater
package:/system/app/LatinIME.apk = com.android.inputmethod.latin
package:/system/app/Phone.apk = com.android.phone
package:/system/app/Social.apk = com.bn.nook.social
package:/system/app/OneTimeInitializer.apk = com.google.android.onetimeinitializer
package:/system/app/GooglePartnerSetup.apk = com.google.android.partnersetup
package:/system/app/WWReader.apk = com.bn.nook.wwreader
package:/system/app/QuickStartActivity.apk = com.bn.nook.quickstart
package:/system/app/Reader.apk = com.bn.nook.reader.activities
package:/system/app/HTMLViewer.apk = com.android.htmlviewer
package:/system/app/CalendarProvider.apk = com.android.providers.calendar
package:/system/app/NookColorTools.apk = com.benhirashima.nookcolorsettings
package:/system/app/RDRPReader.apk = com.bn.nook.rdrpreader
package:/system/app/Library.apk = com.bn.nook.library
package:/system/app/Calendar.apk = com.android.calendar
package:/system/app/Shop.apk = com.bn.nook.shop
package:/system/app/Browser.apk = com.android.browser
package:/system/app/GoogleFeedback.apk = com.google.android.feedback
package:/system/app/Music.apk = com.android.music
package:/system/app/Talk.apk = com.google.android.talk
package:/system/app/ThumbnailService.apk = com.bn.nook.thumbnailservice
package:/system/app/RomManager.apk = com.koushikdutta.rommanager
package:/system/app/UserDictionaryProvider.apk = com.android.providers.userdictionary
package:/system/app/TtsService.apk = android.tts
package:/system/app/AirRuntime.apk = com.adobe.air
package:/system/app/Fava.apk = app.com.book.fava.FavaApp
package:/system/app/DownloadAdmin.apk = com.bn.nook.dadmin
package:/data/app/com.openmerchantaccount.athens-1.apk = com.openmerchantaccount.athens
package:/system/app/Crossword.apk = com.encore.crossword
package:/system/app/Email.apk = com.bn.nook.email
package:/system/app/MediaProvider.apk = com.android.providers.media
package:/system/app/Oobe.apk = com.nook.oobe
package:/system/app/CertInstaller.apk = com.android.certinstaller
package:/system/app/CloudService.apk = com.bn.nook.cloud.service
package:/data/app/air.NookViewer-1.apk = air.NookViewer
package:/system/app/Home.apk = com.bn.nook.home
package:/system/app/GSearch.apk = com.bn.nook.gsearch
package:/system/app/GoogleCalendarSyncAdapter.apk = com.google.android.syncadapters.calendar
package:/system/framework/framework-res.apk = android
package:/system/app/ContactsProvider.apk = com.android.providers.contacts
package:/system/app/Settings.apk = com.android.settings
package:/system/app/Protips.apk = com.android.protips
package:/system/app/MediaUploader.apk = com.google.android.apps.uploader
package:/system/app/ApplicationsProvider.apk = com.android.providers.applications
package:/system/app/NookCommunity.apk = com.bn.nook.community
package:/system/app/Street.apk = com.google.android.street
package:/system/app/GenieWidget.apk = com.google.android.apps.genie.geniewidget
package:/system/app/Sudoku.apk = com.encore.sudoku
package:/system/app/BnCloudRequestSvc.apk = com.bn.cloud.svc
package:/system/app/Chess.apk = com.bn.nook.chess
package:/system/app/GoogleQuickSearchBox.apk = com.google.android.googlequicksearchbox
package:/system/app/DrmProvider.apk = com.android.providers.drm
package:/system/app/Vending.apk = com.android.vending
package:/system/app/Accessories.apk = com.bn.nook.accessories
package:/system/app/B3AndroidReader.apk = com.balthaser.android.reader
package:/system/app/BnAuthenticationService.apk = com.bn.authentication.svc
package:/system/app/LiveWallpapersPicker.apk = com.android.wallpaper.livepicker
package:/system/app/Gmail.apk = com.google.android.gm
package:/system/app/CryptoServer.apk = com.bn.app.crypto.server
package:/system/app/PackageInstaller.apk = com.android.packageinstaller
package:/system/app/TelephonyProvider.apk = com.android.providers.telephony
package:/system/app/LiveWallpapers.apk = com.android.wallpaper
package:/system/app/AccountAndSyncSettings.apk = com.android.providers.subscribedfeeds
package:/system/app/Pandora.apk = com.agilefusion.android.pandora
package:/system/app/BnAppInstaller.apk = com.bn.bnappinstaller
package:/system/app/PicoTts.apk = com.svox.pico
package:/system/app/Superuser.apk = com.noshufou.android.su
package:/system/app/Maps.apk = com.google.android.apps.maps
package:/system/app/YouTube.apk = com.google.android.youtube
package:/system/app/SettingsProvider.apk = com.android.providers.settings
package:/system/app/MagicSmokeWallpapers.apk = com.android.magicsmoke
package:/system/app/GoogleServicesFramework.apk = com.google.android.gsf
package:/system/app/AppLauncher.apk = com.bn.nook.applauncher
package:/system/app/SysChecksum.apk = com.bn.syschecksum
package:/system/app/AFfileDownloadService.apk = com.bn.nook.affiledownloadservice
package:/system/app/Quickoffice_Viewer.apk = com.bn.nook.reader2
package:/system/app/DeviceManager.apk = com.bn.devicemanager
package:/system/app/DownloadProvider.apk = com.android.providers.downloads
package:/system/app/HomeWidgets.apk = com.bn.nook.widgets
package:/system/app/DemoModeApp.apk = com.bn.nook.demomode
package:/system/app/GoogleContactsSyncAdapter.apk = com.google.android.syncadapters.contacts
package:/system/app/VpnServices.apk = com.android.server.vpn
#

Categories: Uncategorized

Firefox OS “Hello World”

ffox

After meeting the Firefox OS guys at the MWC in Barcelona, I decided to give a go to porting my first app from PhoneGap (BlackBerry) to FireFox OS. The app I chose, was a simple HTML based app, with no requirement for access to device sensors etc. It used Jquery Mobile, but not much else.

First up, is that you have to put a file called manifest.webapp into the root (/www) folder of the app, with someting like the following content:

{
“name”: “Free SMS”,
“description”: “A firefox OS app that allows you send free SMS text messages from your firefox smartphone to most European countries”,
“launch_path”: “/index.html”,
“icons”: {
“128”: “/resources/icon128.png”
},
“developer”: {
“name”: “Open Merchant Account Ltd”,
“url”: “http://www.openmerchantaccount.com
},
“default_locale”: “en”
}

Of course, the files index.html and /resources/icon128.png need to exist, and icon128 needs to be 128×128 pixels in size. Zip the folder up, ensuring that manifest.webapp and index.html are at root level of the zip file.

Create an account at firefox marketplace, and go to https://marketplace.firefox.com/developers/submit/app/manifest – I selected packaged app, although the website recommends a that you choose hosted. Press select a file, and upload the zip. If everything works ok, then you should be able to move to the next page where you should supply screenshots, and marketing text.

In order to create screenshots, then you’ll need the latest version of firefox, then download firefox_os_simulator xpi at https://marketplace.firefox.com/developers/docs/firefox_os_simulator – This plugin can then be installed by pressing Tools > Add ons > Gear icon > Install add on from file. Once the add on is installed, press “Add Directory” and select the manifest.webapp from your hard drive.

The simulator should kick into life, and if you unlock it, then swipe the apps right a few pages, you should see your app. Click to launch, and snap a few screenshots.

Currently Firefox OS marketplace appears to be available only for US, UK, Brazil and Spain, but it should increase in time.

My completed zip can be downloaded from my RPI server here http://www.servedwithpi.com/firefoxos.zip

Categories: Uncategorized

Get a profile ID from Facebook URL in C#

If you want to convert a Facebook URL like http://www.facebook.com/LambOfficial into a profile id, “56062886901”, so that you can link to the page using the FB:// protocol, i.e. FB://profile/56062886901 – which looks better than a web link on iOS. Then the simple trick is to replace the “www” with “graph”, and then look for the id parameter.

To do this from code, then you would use something like this:

const string strFBRegex = @”id.:..(?<id>\d+).,”;
var strGraphUrl = strUrl.Replace(“www”, “graph”);
var wc = new System.Net.WebClient();
var strGraphJson = wc.DownloadString(strGraphUrl);
strId = System.Text.RegularExpressions.Regex.Match(strGraphJson, strFBRegex).Groups[“id”].Value;

Where strUrl is the input url, and strID is the output.

However, this does not account for facebook pages that have the format http://www.facebook.com/pages/pagename/id, in which the profile id is visible in the url, but the graph page does not work.

So, something like this catches this case also:

var strId = “”;
if (!strUrl.ToLower().Contains(“/pages/”))
{
const string strFBRegex = @”id.:..(?<id>\d+).,”;
var strGraphUrl = strUrl.Replace(“www”, “graph”);
var wc = new System.Net.WebClient();
var strGraphJson = wc.DownloadString(strGraphUrl);
strId = System.Text.RegularExpressions.Regex.Match(strGraphJson, strFBRegex).Groups[“id”].Value;
}
else
{
strId = System.Text.RegularExpressions.Regex.Match(strUrl, @”\d+”).Value;
}
strFBUrl = “fb://profile/” + strId;

 

Categories: Uncategorized