[Q] Android touch data logs - Android Q&A, Help & Troubleshooting

For a research I am doing, I need to some way to track user touches when they are using the phone in general daily basis. The user will be fully aware about what they are recording. Any method to do would be great.
What have I tried so far?
Method 1. Create an service with overlay transparent view.
Problem Due to obvious security flaws this is prevented starting with ICS. The input touches on the transparent view is not transferred to background and hence user is not able to interact with phone normally. I tried various methods with overlay view defining as type phone or type system alert or switching between them during program execution.
Method 2. View with 1% screen size make with touch outside model
Problem As problem as previous. Touch outside only returns the if touch event happened outside without even initial x, y coordinates.
There are other methods I tried but those are highlighted. Currently, I am thinking about other options:
Option 1 - The pointer location option in developer options: In settings there is this pointer location option that I can utilize. When that option is on, all the info about touch are shown in the top panel. If I can have access to those data afterwards that would be fine too, despite the fact that there will be drawings on the screen when user is using the phone. I have traced the source code of ICS and found the core class that is making that tracking possible. I recreated that class into an service. The logcat shows all the info about touch when I am running it from app. Only problem is the same as problem 1. I cannot track it outside current app. So, if it logs the tracking info even when pointer option is turned on, how will be able to get the information later to use?
This option seems the easiest.
Option 2 - Android NDK If above method is not possible is it possible to do so using NDK? Right direction to this route is also great.
Option 3 - Custom ROM Do I really need to go for Custom ROM while doing this? I am pretty sure this is 100% sure way to do it. But it is seeming very impractical in this particular research and would like to avoid as much as possible.
I would appreciate any suggestion to the path that I can follow. Thank you all in advance.

Related

(UPDATED 18-09-2010) Auto Lock (CSDEVCTRL)

Hi all,
as am now moving to a more open platform (android), i would like to return the favor of learning through this forum, how to program on win mobile by posting the code of this utility.
Its given as is, no warranties, no tricks, do not expect a well written code etc.
Based on C++, no .Net.
Hope will provide to someone, knowledge and info on this subject.
Have fun with it.
Chris
This is the link
http://rapidshare.com/files/419726318/csdevctrl.zip.html
--- Old introduction ---
Hi all,
this is mainly an auto locking program which utilizes the Windows Locking for partial locking (phone related keys are active)
or complete locking (no keys are active).
It can be considered as an add-on to other programs which provide the User Interface, an 'In Call Locker'
with some goodies as mentioned later on which may or not depend on whether the device is locked (with any program that uses
the Windows locking).
The locking can be activated at the following events:
1. After a specified period of idle time (no screen tapping or touching the keyboard).
2. After the device has waken up.
3. During a call ("In-Call Locking" Partial or Full).
Also for any of the first 2 events (idle or wake up) the program can run a specified executable/registered file together with any command line arguments that might be required.
Finally, some 'goodies':
(Stand-alone means it does not require any other option or the device to be locked)
A.(Stand-alone) it can provide some customization on the carrier name so that:
- It can fit on the screen (for example not to overwrite the Battery icon in SPB Shell).
B. (Stand-alone) Turn on Bluetooth if a call is being dialed or received. Then switch it off after
the call has ended and the headset is not connected.
Usefull if you have a bluetooth handsfree kit in your car and you do not want to keep on turning on/off
the bluetooth.
C. (Stand-alone) Flash the Backlight and or Vibrate while ringing.
At last, you can 'see' if your phone is ringing.
D. Reset the Exchange Server Policy.
Stops the frustrating setting of the password being required after connecting to the exchange server.
F. Turn off the display or/and the device itself.
It can be used as a power saver while playing music etc.
G. Set your favorite SIP (which is being reset back to the default with every soft reset).
H. HotKeys (NEW)
You can assign as sequence of keys to perform an action.
(see http://forum.xda-developers.com/showpost.php?p=3666785&postcount=702)
The parameters that are driving the behaviour of this utility are located at:
http://forum.xda-developers.com/showpost.php?p=2424492&postcount=148
The parameters can also be updated using the setup program provided (csdevctrlsetup.exe).
A flow diagram of the parameters that relate to locking, is provided in the zip file for better understanding of their use.
The debugscr.exe program has been added to help identifying the keystroke codes and coordinates. Before this program is executed
the csdevctrl must be stopped as mentioned further down.
To install it:
- Use the cab file provided.
Simply run it and it will create:
- under the 'Program Files' a directory with name CSDevCtrl'
This directory will contain:
csdevctrl.exe is the main program
csdevctrlsetup.exe is the setup program
debugscr.exe is a utility to find the coordinates and keystrokes (optional).
- Shortcuts under the 'Programs'.
- They can be installed either in the internal memory or on a storage card.
To run it:
> Run the Setup program to set the parameters and the Start Up option.
> Run the program (csdevctrl) and it will spawn at the background as another process.
The device will vibrate once to show that the program has started.
To stop it:
> Running the program second time will cause the program to exit (It will show a confirmation window which will close in 3 seconds unless you close it sooner).
To uninstall it:
> Close the process as usual (run it again or kill the process).
> Remove it from the installed programs.
> Also delete the registry key HKEY_LOCAL_MACHINE\Software\CSDevCtrl
As a note, do not rename the csdevctrl.exe as the uninstall depends on this name.
It has been compiled only for WM6.
For more information see the next link:
http://forum.xda-developers.com/showpost.php?p=2391054&postcount=142
If you wish to buy me a beer or a pitta of souvlaki for my effort, feel free to click on the link below:
https://www.paypal.com/cgi-bin/webs...ode=EUR&lc=CY&bn=PP-DonationsBF&charset=UTF-8
Cheers
Chris
Log:
29/11 - v.6.5 - Added power off after disconnect, support for 6.5 win (beta)
17/09 - v.6.18 - General Policy handling, Dump variables for debugging purposes
04/08 - v.6.16 - Added option for startup delay, Keep the backlight on while on call, lock when dimmed.
27/06 - v.6.15 - Added option to lock only if specific programs are running
20/06 - v.6.14.1 - Fixes.
no bad, i like how it uses the built in windows lock.
Thanks,
it works well with my favourite program (Spb shell) which is the reason of me developing this.
this works great on the smartphone but there is a visible window which can be closed too easily with task managers and can't be navigated away from.
any poss you could hide it rather than minimise it?
looeee
i have updated the program to be windowless as you mentioned (attachment replaced)
Hope it works for you.
Cheers
Chris
chrisstavrou said:
i have updated the program to be windowless as you mentioned (attachment replaced)
Hope it works for you.
Cheers
Chris
Click to expand...
Click to collapse
First of all, thanks for sharing!! This is a very nice app.
I've tested the 2 versions (window and windowless), and I have a suggestion if I may.
I like the idea of the program being windowless, since it becomes more appealing to the eye (I mean, it's great we don't have to see the small window minimize everytime we wake the device), but now, to be able to close the app, we must use a task manager to kill the process(e.g. sometimes we may want to test some other locking software and we need to disable it temporarily). So my suggestion would be that when we run the program once it starts, the next time we run it, it stops. Would that be possible? I think it would make your app perfect!!
Remember, it's only a suggestion.
Thanks in advance.
Its good to know that it may be of use by someone
I have updated it as you mentioned, it will exit if you run it the second time (attachment replaced).
chrisstavrou said:
Its good to know that it may be of use by someone
I have updated it as you mentioned, it will exit if you run it the second time (attachment replaced).
Click to expand...
Click to collapse
Now it's just great!!
Thank you very much for this.
What's the purpose of this app, from the description above it looks as though it does what the original lock already does, so I ask again; what's the purpose of this app?
NiteStalker said:
What's the purpose of this app, from the description above it looks as though it does what the original lock already does, so I ask again; what's the purpose of this app?
Click to expand...
Click to collapse
Automatic lock!!
Once your device light gets dimmed, or on device wake up, without having to press the lock button.
Is that clear enough for you?
Just set the time for 0 minutes, and it's locked on wake-up.
Guess the dim part is good, thanks for clearing that up. I guess my brain wasn't working, I couldn't figure out what deemed was.
now i love the app for what it does... my only suggestions or worries are... after setting that up, i no longer am able to input a password when the lock is activated... and when the program is activated, it wakes the device up from the dimmed, light, thus defeating the purposes of the backlight going off... and also draining the battery a little more... is there ayway that the program can run without waking the device?
MrGalione973 said:
and when the program is activated, it wakes the device up from the dimmed, light, thus defeating the purposes of the backlight going off...
Click to expand...
Click to collapse
I have had this happen to me sometimes as well, already in my short testing time span: when pressing the power button (once) the backlight switches off and back on!
I am also experiencing that it sometimes just does not seem to lock: when pressing the power button twice (with pause) my device only sometimes locks.
And in case you are open to another suggestion: perhaps you can minimize all windows when locking, so the lock ends up on the today screen; or make it an option somehow (command line parameter?)
Thanks for the advices i will be checking them out and come back to you
mousio said:
And in case you are open to another suggestion: perhaps you can minimize all windows when locking, so the lock ends up on the today screen; or make it an option somehow (command line parameter?)
Click to expand...
Click to collapse
Another vote for that!
TBH the only reason I still use S2U is because I can see my missed calls, appointments etc. It's a great app, don't get me wrong, just not something I need.
Your locker would be perfect for me with an option to go back to Today on locking.
Or, perhaps you could implement a simple count of missed calls, SMS, MMS, emails and appointments directly on the lock screen? Just don't let it grow too much!
works beautifully for me with the spb mobile shell 'now' screen showing me the info, thankyou very much!
Why don't you add an option of command line parameter specifying a program/link to be launched before locking? That way it would be very flexible (there are plenty of small programs around doing loads of stuff - like minimizing everything or sending a text or calling your mama - possibilities are endless)
Program has changed as per your advices:
- Leaves the device in idle state for better power management
- Run an application while trying to lock by reading a file.
I have updated the first entry of the thread with some more info and the file.
Any comments are welcome.
Enjoy
I love it. It's simple and effective. Just the way I like things. I'll keep testing it for a while and report back.
I've got another idea actually.TODAY option works really well, the only 'problem' (its not a problem,just room for improvement ) that you need to reopen all the windows you had opened before.
How about an option TODAY&BACK when the minimised windows would be reopened when unlocked? In other words-minimised when locked, back to what it had been before locking when unlocked? It would make it perfect (until next idea strikes)
Anyone tested it on WM5?

Lifecycle question

I'm a fairly new Android developer and am trying to get a better
understanding of how to handle the lifecycle events.
First, I'm under the impression that every new screen I create for my
app is an activity in it's own right. Is this correct, or is there a
better way to display different screens within the same activity.
If every screen should be it's own activity, how do I manage something
like a network connection that I want to keep alive for every screen,
but I want to disconnect from when the app actually goes away? Do I
need to handle the app being destroyed in every activity?
Before JellyBean this wasn't that much of an issue as the user pretty
much "backed out" of the app to get rid of it, so handling it in the
main activity was fine. But now I can switch between apps and kill
the app no matter what screen it's on, so that's causing me some
issues.
Thanks,
Dan
About your first question:
I hate that too lol. What I do now is declaring 2 screens in the layout file, but set one to visibility="gone"
Now when you want to switch to the other screen, do:
MainScreen.setVisibility(View.GONE)
SecondScreen.setVisibility(View.VISIBLE)
That will switch the screens.
Second question: network actions should always be done in a background service. At least I think they should; my app crashed when I wanted to do it in an activity.
I don't have an answer on the last question, sorry.
Hope I helped!
Sent from my Galaxy Nexus running Android 4.2 JB

[Q]Get hardware-key-event while in background

Ever since I got my Droid 3 I wanted to be able to control games using the keypad, but sadly most games won't support it, so I figured, it would be cool if I could make an app that catches all the keyboard events and triggers fake MotionEvents for preset regions of the touchscreen (kindof how it's done on the iControlPad).
I believe I've found a way to fake the touches, but when searching for a way to read keyboard events when my app doesn't have the focus all lead to dead ends.
Does anybody have a clue how I could do that?
If anyone cares: I not only managed to find a way to read out all the touches and keystrokes that should go to other apps (though some android-coworker said it was impossible), but I can also filter which one of those I let through. I can even block the back- and home-buttons. And it's runnable without any running service or activity, so invisible and unkillable. I don't need most of that for my app, so I won't use what I don't need, I just stumbled across it by accident.
Every threat on this topic ended with "It's impossible to read out keystrokes destined to another app, because it would be too much of a security issue." Well, it is possible.
Sent from my XT860 using xda app-developers app
Dakkaron said:
If anyone cares: I not only managed to find a way to read out all the touches and keystrokes that should go to other apps (though some android-coworker said it was impossible), but I can also filter which one of those I let through. I can even block the back- and home-buttons. And it's runnable without any running service or activity, so invisible and unkillable. I don't need most of that for my app, so I won't use what I don't need, I just stumbled across it by accident.
Every threat on this topic ended with "It's impossible to read out keystrokes destined to another app, because it would be too much of a security issue." Well, it is possible.
Sent from my XT860 using xda app-developers app
Click to expand...
Click to collapse
I do care! I would appriciate to hear how this works, because I would need it for my ongoing development.
Besides Camara button, which is of cause easy due to the broadcast event, and the volume keys (which are more tricky, since you have to inject an own BroadcastReceiver to the AudioManager), how do you handle other keys?
Ok, it's been a while since I did this, and I had a lot of work on other projects in between so, I hope I get everything right.
To do the whole trick you need root access.
1) Get the android.permission.SYSTEM_ALERT_WINDOW permission
2) Open up a system alert window with no content. There is a setting somewhere that lets you catch all keystrokes and touches. This blocks them all from going through
3) This one is tricky. I had to analyse nonsense for days to get it right, and I fear it's still not very good. Go to /dev/input on your phone. There are files named event1, event2, ...
Each of those correspond to one input device, so one is your touchscreen, one is the keyboard and so on. What you do now is you perform the action you want to recreate on the phone (e.g. press a key) and monitor the event files through adb (there is a linux command, that I forgot, that lets you view a file in real time. Also you can copy that real time view to your harddrive by typing "adb shell [command] > record.txt").
Once you know every event that you want to recreate, you can go to the next step.
4) This is what your app has to do to let a keystroke through: The user presses a key, your app catches it. Then it changes it's mode (see 2) ) to not catch any keystrokes at all, posts the corresponding event for that key in the fitting /dev/input/eventX-file, and sets itself to catch keystrokes again.
Before the whole thing make sure, your /dev/input/eventX-file has a chmod of 666 or therelike, since you can't write into it from your app. You only need root for that, after that you don't need root. The OS resets the chmod on each reboot.
It is a hell of a lot of work. Calculate about a week or more for just that (at least that was what it took me to figure it all out). Good luck
PS: If you get your app system privileges, there is also the android.permission.INJECT_EVENTS, which allows you to inject key- and touch-events to another app using a simple function (can't remember it, but Google does). For your app to be able to get system privileges you need to copy it to /system/app, which requires root and a mounted /system. Catching the keystrokes still works the same way as above.
Dakkaron said:
Ok, it's been a while since I did this, and I had a lot of work on other projects in between so, I hope I get everything right.
To do the whole trick you need root access.
1) Get the android.permission.SYSTEM_ALERT_WINDOW permission
2) Open up a system alert window with no content. There is a setting somewhere that lets you catch all keystrokes and touches. This blocks them all from going through
3) This one is tricky. I had to analyse nonsense for days to get it right, and I fear it's still not very good. Go to /dev/input on your phone. There are files named event1, event2, ...
Each of those correspond to one input device, so one is your touchscreen, one is the keyboard and so on. What you do now is you perform the action you want to recreate on the phone (e.g. press a key) and monitor the event files through adb (there is a linux command, that I forgot, that lets you view a file in real time. Also you can copy that real time view to your harddrive by typing "adb shell [command] > record.txt").
Once you know every event that you want to recreate, you can go to the next step.
4) This is what your app has to do to let a keystroke through: The user presses a key, your app catches it. Then it changes it's mode (see 2) ) to not catch any keystrokes at all, posts the corresponding event for that key in the fitting /dev/input/eventX-file, and sets itself to catch keystrokes again.
Before the whole thing make sure, your /dev/input/eventX-file has a chmod of 666 or therelike, since you can't write into it from your app. You only need root for that, after that you don't need root. The OS resets the chmod on each reboot.
It is a hell of a lot of work. Calculate about a week or more for just that (at least that was what it took me to figure it all out). Good luck
PS: If you get your app system privileges, there is also the android.permission.INJECT_EVENTS, which allows you to inject key- and touch-events to another app using a simple function (can't remember it, but Google does). For your app to be able to get system privileges you need to copy it to /system/app, which requires root and a mounted /system. Catching the keystrokes still works the same way as above.
Click to expand...
Click to collapse
Thank you for your innovative solution
I do not understand two points:
1. How does your app will stay on top and its windows receives events, when the user opens another app, a game for example.
2. How does the background app, the game, keep running? Isn't the game onPause() when you are running your app in front?
Thanks you.
Dakkaron said:
2) Open up a system alert window with no content. There is a setting somewhere that lets you catch all keystrokes and touches. This blocks them all from going through
Click to expand...
Click to collapse
Can you please try to remember and elaborate " a setting somewhere" part?

[Q] clone one to many - Atrix 2

Hi guys, I’m new to the forum and fairly new to Android devices in general. I’ve googled a good bit before posting, and searched this forum for some keywords, but haven’t come up with a solution to what I need to do.
I have what seems like a fairly simple need: Set up an android device the way I want it, and then clone this image to multiple other devices.
I work with an organization that conducts a lot of epidemiology surveillance in foreign countries. The surveys are done on android based devices with a collection of off-the-shelf apps, plus one we had custom built for our purpose. Data is sent to us via whatever mobile networks happen to be available in the country being surveyed (we buy our phones unlocked, and get the SIM cards in-country).
As we continue to expand, installing all those apps and getting all of the settings just right becomes a very tedious, repetitive task, when you consider doing 100+ phones a month. .
Ideally I would like to stick with the factory rom, just add/remove some apps and configure settings. The cloning process needs to be fairly straight-forward, and not require a bunch of apps to be installed on the target phones first, because that kind of defeats the purpose.
For the time being, we’re using Motorola Atrix and Atrix 2. We also have some XT720s but we’re phasing those out.
Not sure if this is relevant, but below is roughly what provisioning currently looks like:
1. We receive a batch of phones, say 100 at a time
2. First, do a factory reset, and go through the initial setup
3. Remove as many of the factory installed apps as possible
4. Set up WiFi
5. Log into Google Play account and install the 6 apps we actually use
6. Make LauncherPro the default desktop, set it to only use 1 dock and 1 desktop, set a plain boring background, hide all except the app drawer icon, and have and icon for our app, and an airplane mode widget on the desktop.
7. Finally, enter the server connection settings in our survey app (this part we’ve gotten to a point where all we do is drop a config file to the SD Card, and it picks up the settings for this particular app)
8. Turn off the phone, and do it all again on the other 99 devices…
Any thoughts on how to automate this?

[Q] Restrict users

Hello,
I've been looking for this but no success. Hopefully someone can point me in the right direction.
I'll explain the system for the complete picture:
We've built a system for a healthcare organization which uses a SMS server, if a person pushes a button on an (wifi) alarm unit in his/her room a SMS is sent to a Samsung Xcover2 phone, a specially written app 'catches' this special SMS before the stock android SMS app will get it, diplays the room that made the alarm and from there the user of the Samsung Xcover can make a one-touch operation to make a direct connection to this room so you can speak to that person in the room. From the phone the call can be closed and the alarm unit in the room will be reset.
So far so good. We deployed a pilot project and it works really well.
Except for the Samsung Xcover. We used them straight out of the box, set the settings (no google account, wifi is not used) but from there the user is able to change ANYTHING.....and they do; different sounds, fonts, backgrounds, they make pictures......basically they make a mess of it.
And since we use a Private GSM system with nano cells there's no internal number displayed on the screen so we use a personalised wallpaper with our company's logo and the internal number (they are also used as normal internal phones for in- an outbound communication). They keep changing the wallpaper so phones get 'lost' since they can't see the number anymore.
What I'm looking for is something that basically lets us control what the user can or can't do. Preferably with the stock ROM, rooting and loading a custom ROM is an option but time consuming.
Anyone with a suggestion??

Categories

Resources