Open GoogleCodeExporter opened 9 years ago
I wonder what it would take to get this one going.
I checked out the source code and it looks like USB is completely
unimplemented... are you thinking of using the adb for this? or are you
thinking of having the desktop application monitor the USB device somehow by
using the native OS? I'd like to see if I can help with this.
Original comment by nizn...@gmail.com
on 27 Sep 2010 at 9:16
As far as I know, Android does not provide an API for USB communication, adb
port forwarding could work.
> I'd like to see if I can help with this.
Your help would be much appreciated :)
Original comment by lehph...@gmail.com
on 27 Sep 2010 at 9:23
Hi,
So I just wrote some test code that uses adb port forwarding to pass messages
between a quick-n-dirty python script on the computer and a very simple android
activity that simply listens on a certain port - this is workable two way
communication.
As a proof of concept, this works 'as advertised'.
What is the mindset about communication? My approach was to open a server
socket on the phone and then connect to it from my computer, send a few
messages -- which get echoed back using the same connection.
I think this doesn't agree with the android-notifier concept... I believe that
what we need is for the server to run on the computer (inside the desktop
application) and the phone to connect to it every time there's a notification
(no need to maintain an open connection); is this how that's done? Or is it
two-way (for SMS reply support for example), where the side notifying is the
creating the client connection... this will require two server's one on the
phone, and one on the computer.
Please provide some pointers.
Original comment by nizn...@gmail.com
on 27 Sep 2010 at 11:19
I'm afraid your proof of concept is backwards - what you want is to have the PC
listen and the Android phone start the connection - can you get that to work?
Original comment by rdamazio@gmail.com
on 27 Sep 2010 at 11:48
By the way, if we are to use the adb for communication, we will need the users
to have the android sdk installed. If we do, why complicate our lives with
sockets if we can just use logcat to monitor the device? In this way, we can
have the desktop application "listen for" android log messages with our special
tag that will be of a specific format, that can be parsed for a notification...
Original comment by nizn...@gmail.com
on 27 Sep 2010 at 11:49
No we don't need them to have the Android SDK installed - the idea was to
isolate the communication bits of adb into a library that we can link against.
See http://code.google.com/p/adblib/ (no code though, adb's source is horrible,
I ended up not finishing the lib).
Original comment by rdamazio@gmail.com
on 27 Sep 2010 at 11:59
Yeah - there doesn't seem to be a way to do "backwards" port forwarding - from
the phone to the computer; like there is from adb on the computer, to the
phone; without the SDK, we will need to listen to 'raw' USB bits and filter
things out. My aforementioned proposal of using logcat could be an easy way of
using the existing pipeline to send notifications - but that challenge remains.
I'll look into it.
Original comment by nizn...@gmail.com
on 28 Sep 2010 at 12:09
Why not have the android app open a server socket and have the desktop app
connect to it? We can send messages in both ways anyway, we just need to make
the desktop app look for devices periodically through adb. And I think we can
bundle only what is necessary for adb to work, not everything in the SDK.
Original comment by lehph...@gmail.com
on 28 Sep 2010 at 1:10
Provided I don't know enough about bundling adb, I don't see a reason why this
wouldn't work.
There can only be 2 use cases: one when the desktop app starts first, and one
when it starts after the android app.
If it starts first, it could, like you said - periodically look for servers at
a pre-determined port.
If it starts last, the server (on the phone) is there, so there's no problem.
Because we're using port-forwarding, it is also feasible for more than one
instance of the desktop application to connect to a single phone - even on
different machines. But I don't want to get into that to much.
Yeah, so this takes me back to the original question here:
http://code.google.com/p/android-notifier/issues/detail?id=162#c3
Bottom line: I can give you code to start a server and handle connections for
you to start with the service the android app starts; this code will also be
able to provide that connection as a notification "target" (if I'm using the
right terminology here) so it can be sent notifications like anything else.
I just need to make sure I have robust error handling (e.g. when the
connection's lost, etc).
Can you provide some entry points to the code for me to start my server socket
thread in the service and for me to implement (if necessary) the
UsbNotificationMethod?
Original comment by nizn...@gmail.com
on 28 Sep 2010 at 2:26
afaik keeping the connection open will drain more battery than you want as
you'll need to hold a wakelock.
Of course this is not a direct issue if you're plugged to usb, except you'd
need to detect whether you're plugged to usb.
Original comment by rdamazio@gmail.com
on 28 Sep 2010 at 2:31
That makes complete sense... so I'll need to use some android API, something
for detecting that the USB is connected or maybe even just the BatteryManager
to know when I'm connected.
Then, the USB server will know to kill itself when disconnected or start itself
upon receiving that intent.
Original comment by nizn...@gmail.com
on 28 Sep 2010 at 2:53
I don't know about bundling adb either, it'll need some research.
> Can you provide some entry points to the code
Basically, you have to implement the
com.google.code.notifier.desktop.NotificationReceiver interface in the
multiplatform client to add usb support. I'd suggest you to use Netty to handle
network communication, you can take a look at TcpNotificationReceiver for an
example of a complete implementation of NotificationReceiver.
Original comment by lehph...@gmail.com
on 28 Sep 2010 at 3:30
The license of the Windows USB driver doesn't allow redistribution, we have to
ask the user to install it before enabling usb notifications...
Original comment by lehph...@gmail.com
on 11 Oct 2010 at 1:52
Is there any seperate repository from any of you guys working on USB support?
I don't know if I can help out that much, but this feature is very interesting.
Original comment by bjorn.to...@gmail.com
on 14 Oct 2010 at 6:33
No, I don't have anything yet... school and work got kind of busy lately.
Original comment by nizn...@gmail.com
on 14 Oct 2010 at 6:43
http://code.google.com/p/adblib/ - I created this one but never got around to
posting any code. The adb source was more complicated than I thought (too messy
IMHO).
Original comment by rdamazio@gmail.com
on 14 Oct 2010 at 6:51
I've started implementation of
com.notifier.desktop.notification.usb.UsbNotificationReceiver using adb to do
port forwarding, it's in SVN repo.
Original comment by lehph...@gmail.com
on 14 Oct 2010 at 8:45
Please add a wiki page detailing how it'll work.
Original comment by rdamazio@gmail.com
on 14 Oct 2010 at 10:12
I've committed the code to the android app to get usb support going, the idea
is to use adb to forward connections as previously discussed in this issue.
The desktop app is running adb forward tcp:10602 localabstract:androidnotifier
to forward connections on port 10602 to a LocalServerSocket on the device.
Since the only way to know if the device is connected to usb is through the
BATTERY_CHANGED intent, I added a new extra to the notification intent to let
the NotificationService know if it should start a socketserver. I can't get it
to run the server only once though and notifications are not going to the right
UsbNotificationMethod instance, help?
Original comment by lehph...@gmail.com
on 15 Oct 2010 at 3:39
Ok, finished usb support in both desktop and android apps. Right now,
UsbNotificationMethod will keep a thread running all the time even if the phone
is not plugged to usb, the thread just waits for incoming connections so it's
not a battery killer but we can/should? implement a BatteryReceiver that
starts/stops this thread if the phone is plugged/unplugged.
I'll make the Android SDK path configurable through the preferences window of
the desktop app, then it'll be ready for testing.
@rdamazio Do I need to do something to provide test builds of the apk file?
Original comment by lehph...@gmail.com
on 15 Oct 2010 at 3:26
Cool :)
You can just build them normally (choose to export the project from eclipse,
sign with your own key), it'll work (people will just need to uninstall the
official version before trying yours because of the different key).
Original comment by rdamazio@gmail.com
on 15 Oct 2010 at 5:56
Android app: http://dl.dropbox.com/u/1401233/AndroidNotifier.apk
I'm linking to the pure java desktop program, no exe or sh scripts, to make it
easier for me to post fixes.
lib: http://dl.dropbox.com/u/1401233/android-notifier-desktop-lib.zip
jar: http://dl.dropbox.com/u/1401233/android-notifier-desktop.jar
Copy android-notifier-desktop.jar to some directory and unzip
android-notifier-desktop-lib.zip into the same directory. Now rename one of the
swt-*.jar files to swt.jar only, you have to rename the file that matches your
OS, for example, swt-win32-x86_64-3.7M1.jar is for Windows 64-bit,
swt-gtk-linux-x86-3.7M1.jar is for Linux 32-bit and
swt-cocoa-macosx-x86_64-3.7M1.jar is for MacOSX 64-bit.
Now you can run it with java -jar android-notifier-desktop.jar from command
line, not all features will be working correctly and preferences may be reset,
but USB support will work fine.
For USB notifications to work, you have to download the Android SDK for your
system from this page: http://developer.android.com/sdk/index.html and unzip it
somewhere, the directory created after unzipping is SDK_HOME. The command
"SDK_HOME/tools/adb devices" must list your device correctly, something like
this:
List of devices attached
HT012P801245 device
To do this, you have to enable USB Debugging in Settings -> Applications ->
Development in your device and setup your OS to recognize your phone with the
following instructions:
Windows users must install the USB driver for their phone available in this
page: http://developer.android.com/sdk/win-usb.html or in respective
manufacturer page.
Linux users must follow the instructions in this page:
http://developer.android.com/guide/developing/device.html#setting-up but the
comment of jerichod in
http://www.google.com/support/forum/p/android/thread?tid=08945730bbd7b22b&hl=en
is much more detailed and helpful.
MacOSX users don't have to do anything according to Google documentation.
Now that "SDK_HOME/tools/adb devices" works for you, start the desktop app,
enable USB in preferences and select SDK_HOME in the dialog that appears,
something like the following will be printed in your log file:
2010-10-16 14:08:35,459 DEBUG [UsbPortForwarder] - Found [1] new device(s)
2010-10-16 14:08:35,460 DEBUG [UsbPortForwarder] - Forwarding port [10602] for
device [HT012PXXXXXX]
2010-10-16 14:08:35,493 DEBUG [UsbPortForwarder] - Forwarded successfully,
starting client
Go to the android app select Notification Methods and enable USB, disable Wifi
and bluetooth to make sure notifications are arriving only over USB.
That's it, easy right?
Original comment by lehph...@gmail.com
on 16 Oct 2010 at 5:14
Tried the above, however getting an error when running the java notifier
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/cl
i/CommandLineParser
Caused by: java.lang.ClassNotFoundException: org.apache.commons.cli.CommandLineP
arser
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
Could not find the main class: com.notifier.desktop.Main. Program will exit.
Original comment by Brandon....@gmail.com
on 23 Oct 2010 at 12:14
@Brandon.Martine00 Your directory layout must be:
+ some directory
- android-notifier-desktop.jar
+ lib
- swt.jar
- commons-cli-1.2.jar
You have to run "java -jar android-notifier-desktop.jar" inside "some
directory".
Original comment by lehph...@gmail.com
on 23 Oct 2010 at 1:10
Could you provide the source code for the desktop application with USB support?
Thanks!
Original comment by miguelpe...@gmail.com
on 25 Oct 2010 at 1:45
lehph,
That helped in getting it started. Thank you, but I'm having problems as notifications aren't popping up. I have Growl installed and I tried System Default, but not getting any messages when attempting to test sending myself a SMS. I've left my Devices set to 'Receive notifications from any device' and I tried to pair with test and it doesn't see anything when attempting to pair. Any help?
Thank you,
2010-10-25 12:01:26,114 INFO [ApplicationImpl] - Starting SWT
2010-10-25 12:01:26,208 INFO [ApplicationImpl] - Showing tray icon
2010-10-25 12:01:26,302 INFO [ApplicationImpl] - Starting [service server]
2010-10-25 12:01:26,302 DEBUG [ServiceServerImpl] - Starting service server on p
ort [10700]
2010-10-25 12:01:26,302 DEBUG [InetAddresses] - Looking for local address
2010-10-25 12:01:26,317 INFO [ApplicationImpl] - Starting [Growl] broadcaster
2010-10-25 12:01:26,317 DEBUG [InetAddresses] - Local address found
2010-10-25 12:01:26,520 INFO [ApplicationImpl] - Starting [USB] receiver
2010-10-25 12:01:26,536 INFO [ApplicationImpl] - Adding to startup
2010-10-25 12:01:26,708 INFO [GrowlNotificationBroadcaster] - Registered with GN
TP server sucessfully
2010-10-25 12:02:05,899 DEBUG [UsbPortForwarder] - Found [1] new device(s)
2010-10-25 12:02:05,899 DEBUG [UsbPortForwarder] - Forwarding port [10602] for d
evice [HT09PRXXXXXX]
2010-10-25 12:02:05,930 DEBUG [UsbPortForwarder] - Forwarded successfully, start
ing client
Original comment by Brandon....@gmail.com
on 25 Oct 2010 at 6:09
Does it work over wifi? Do you have the log of the android app? You can get it
using the alogcat app from market. Try to send some test notifications and then
send the log to yourself via email.
Original comment by lehph...@gmail.com
on 25 Oct 2010 at 6:24
Not sure why, but installing alogcat worked! Really excited for this because I
can use my 6 multi-monitor workstation for everything at work and now dock my
phone to it!
Thank you so much!
Original comment by Brandon....@gmail.com
on 25 Oct 2010 at 6:40
It must be some error that happens randomly on the android side, please attach
the android log in a new issue when it happens.
Original comment by lehph...@gmail.com
on 25 Oct 2010 at 7:05
So it took me some trial/error to get as far as I have. FYI for HTC Eris, you
need HTC's USB driver (I got it from installing HTC sync), the Android one
didn't work on its own. So the adb devices is working now, but when I start up
the notifier I get:
2010-11-05 16:48:03,030 DEBUG [UsbPortClient] - Could not connect to device
[HT012HXXXXXX] over usb, will try again in [3] seconds
over and over and over again. I'm at work now, so wifi and BlueTooth aren't an
option (hence why I'm interested in USB!). When I get a chance at home, I'll
try the same via wifi to see if it's notifier or not. Any additional help would
be lovely, thanks!
Original comment by Marie.F....@gmail.com
on 5 Nov 2010 at 8:51
@miguelpellon Sorry, I didn't see your comment, the source code is available in
the Source tab, direct link:
http://code.google.com/p/android-notifier/source/browse/trunk/#trunk/MultiDroidN
otifier
@Marie.F.Russo Make sure you've enabled USB support in the android app. If it's
enabled and still doesn't work, please attach the android log in this issue
using the alogcat app from android market.
Original comment by lehph...@gmail.com
on 5 Nov 2010 at 9:41
Just realized I wasn't running the android app last time I tried. I turned that
on, but realized I hadn't installed the updated version given here. After all
that, it works! However, without the SMS reply capability, I can't use this app
just yet. Thanks for all of your help!
Original comment by Marie.F....@gmail.com
on 8 Nov 2010 at 3:05
Taking over lehphyro's issues.
Original comment by rdamazio@gmail.com
on 11 Jan 2011 at 4:31
I'm not sure about windows, but on linux and mac, adb has moved to
platform-tools/
desktop side is still looking for it in tools/
Original comment by halkeye
on 6 Feb 2011 at 4:05
What happened to this? The Dropbox links do not work and MultiDroidNotifier
0.5.1 doesn't have a USB option in preferences.
I am willing to try to lend some help here, but I need some starting point.
Original comment by thiago.a...@gmail.com
on 14 Nov 2012 at 7:14
Original issue reported on code.google.com by
lehph...@gmail.com
on 22 Sep 2010 at 12:09