Open display calibration screen programmatically - android

I have figured out that in order to calibrate accelerometer in Android I don't need to do anything special I just need to open the horizontal calibration screen in the GB and G-Sensor calibration screen in the iCS+ now how can I open these activities programmatically?
I am able to open the display settings but can't open calibration screen
startActivityForResult(new Intent(android.provider.Settings.ACTION_DISPLAY_SETTINGS), 0);

Really they don't have this option?
I have ~50 Android devices and have not seen a calibration option on most of them. In fact, I cannot recall seeing a calibration option on a device manufactured since 2009. And there is nothing in the AOSP Settings app that suggests to me that it is a calibration mechanism.
Certainly, there is no documented and supported means of starting such a Settings screen.

Related

How to mirror android screen/app to a screen programatically?

I am developing an android application and I'm trying to implement a button which initiates a screen mirror to a selected device.
I want it to be as straigth forward as possible, but the best i've been able to do is have it open the cast settings on the Settings app, which isn't a proper solution. It would be ideal to start screen mirroring with a single click.
Problem is i've tried using Googles Cast SDK but that only allows me to build custom HTML cast receivers, which isn't what I want, I just need a screen mirror from the android device to a screen/TV.
Is there any Android module/API that would allow me to do this with a single click, even if I have to use a Chromecast/Miracast device connected to the screen?
No, sorry, this is not an option AFAIK.
At least part of this is privacy/security. You seem to want to be able to start screen mirroring purely from app code ("I'm trying to implement a button", "allow me to do this with a single click"). Your button is the "single click", and so you really want to be able to do this without user involvement at all (since there is nothing forcing that button to exist). Showing the contents of the screen on another screen that might be visible to lots of people is the sort of thing that users need to approve, which is why additional clicks will be required.
In addition, there may be more than one target for screen mirroring within range, and the user needs to be able to choose which one to use, if any.
Combine all that with limited support for wireless displays across the various Android device manufacturers, and there really isn't anything here for what you want.

Prevent remote screen recording of android app programmatically

I want to prevent remote screen recording of my app using third party apps like Anydesk, Quicksuppport, Teamviewer etc.
I have used below flag for activity :
getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);
but the above flag doesn't work for all devices.
Any other work around for preventing remote screen recording?
The apps you mentioned are operating with either permission of CAPTURE_VIDEO_OUTPUT or CAPTURE_SECURE_VIDEO_OUTPUT. Unfortunately, if they own CAPTURE_SECURE_VIDEO_OUTPUT, then setting the FLAG_SECURE on your window has no effect from their viewpoint.
Sadly, I don't think there is a better (or more effective) way to achieve the desired behavior.
If you make your app a device administrator, then (on certain api levels) you will have the ability to disable screen capturing on the entire device, but setting this up is a lot of hassle, and it's probably not what you want to do in the first place.

Running full-screen Android application with screen/backlight off

Here's what I need to do. I want to use an Android tablet for science research, but I will need to programmatically control the screen/backlight. Specifically, there is a mode where my app will need to communicate with other systems via WiFi, play sounds, and have the touchscreen active, but the backlight must be completely off; in this mode, the device cannot emit any light, or it will interfere with the science. Obviously, this cannot be sleep mode! Is this feasible?
I've looked around a bit, and this sounds really promising, but it isn't crystal-clear (to me, anyway!) whether this will work. Can anyone vouch for that?
Finally, does it matter which tablet I choose? Basically, there seem to be three possibilities: the backlight is controlled with a switch (doubt that is done anymore), the CPU can only turn it on or off, or the CPU can adjust it fully. Writing this makes me feel rather silly about being concerned, but a Samsung rep yesterday told me I can't do this on the Galaxy. Anyone care to recommend a tablet?
Thanks!
Specifically, there is a mode where my app will need to communicate with other systems via WiFi, play sounds, and have the touchscreen active, but the backlight must be completely off
Android does not support "have the touchscreen active, but the backlight must be completely off". And, you do not have the ability to turn the backlight "completely off" programmatically.
I've looked around a bit, and this sounds really promising
That sets the backlight to be low. Some devices may elect to turn the backlight off when it is set low. That is up to the device manufacturer.
Finally, does it matter which tablet I choose?
See above.
Since its a science research I'm going to assume you may not need to divulge this application and want it in a controlled environment. If this is the case, a little creative thinking suggests that since the touch screen will still react to even if covered by a thin layer of plastic (like the screen protectors for instance) you may be able to apply some opaque vinyl on top of the screen (easy to remove) for doing the experiments.
This may not be useful but since to me it sounded like it could I thought I'd share my thoughts with you on this one. Once you've covered the screen with the vinyl, the rest is as usual, keep screen on, and do your magic.
:)

Reacting to multi-buttons wired headphones

I am driving some experiments with a pair of a-JAYS Four headphones (having 3 buttons on its wired remote/mic) plugged onto a Galaxy Nexus (ICS 4.0.2).
My issue is that only the middle button is 'recognised' by a test app I have written, i.e. triggering both Intent.ACTION_MEDIA_BUTTON and/or Activity.onKeyDown callback with KeyCode 79 when it is pressed.
Pressing the two other buttons don't trigger any of the previous methods. For info, those headphones and its 3 buttons work on Apple iPhones and Apple computers (at least a MacBookPro 2011), as advertised on the box...
Firstly I thought Android or my device could simply not handle more than one button on a wired jack remote (even if that sounds weird...) but then I had a try with a pair of headphones from HTC (the ones coming with one of their Desire device) having 3 buttons. Middle button would react the same way as my a-JAYS, but the two other buttons are also recognised with KeyCodes 87 and 88, respectively Play Previous and Play Next media keys.
So it seems that either the device or the low levels layers of Android are simply not able to catch certain headphones buttons signals :/ (at least those which are not 87 and 88)
Any idea anyone about how to make Android able to recognise other buttons/signals from such headphones as Apple compatible ones? Would it imply low levels drivers writing for ICS or am I missing something really obvious?
Any help would be much appreciated. Can post my test-app code if needed.
Cheers
The signals/ resistance from the volume control buttons (1.525-1.495 V for volume down, and 1.619-1.587 V for volume up) are currently unable to be recognized through the android framework's software. I believe this has to do with Apple having a patent on the designated volume controls and so Google won't release to developers how the framework recognizes particular signals through the fourth connector on the headphone jack. The center/mic/action buttons on headsets generally work, it shorts the path from ~2V to ~0V and Apple does not own the patent for that. If someone could figure out how to interact with the inputs on their own that would be huge. I am tempted to learn app development and find a workaround.
The problem is more complicated that it seems: http://david.carne.ca/shuffle_hax/shuffle_remote.html .
I have to emphasize that I am no expert on this topic, but from what I have read and tried so far I conclude that it is not impossible to have an Android phone respond to an iPhone headphone's volume buttons, but for some reason the performance is poor/lagging.
There are some apps trying to do the magic, but they are too unreliable for everyday use. I suppose the problem is that triggering the signal may have to be implemented at a lower OS level than most regular apps have access too.
The solution could probably be some kind of a ROM mod...
If you can implement this, I am sure it would be a big deal for the Android community, and maybe a good biz for you.
Kind Regards, your fellow Hungarian
Gergő
You have to press and hold the middle button while plugging the headphones to the jack. That will make the microphone work on an Android. It works on my HTC Thunderbolt.
I believe it's a hardware issue (at least in regards to Apple headphones). If you look at the plug on those they have four contacts instead of the normal three. I'm willing to bet they run their button signals through that extra contact. AFAIK, there is no Android equipment wth jacks to match that.
So, ultimately I don't believe you can make apple earphones with buttons work for android (as far as button functions go).
You have to hold the middle the whole time for it to work. If you let go and not playin music it says accsessary not supported but if u play music and let go it simply stops the music until you hold it again. Maybe tape the middle button shut really tight?
If you look at the four contacts, tip-ring-ring-sleeve (TRRS), and know that MOST headphone sets are:
tip: left
ring 1: right
ring 2: ground
sleeve: mic
(1/4 inch pro audio stereo plugs are known as TRS - tip-ring-sleeve)
although some reverse the ground and mic contacts, what you need to know as far as how the device recognizes the different buttons you have, is that those buttons are making a short between the ground and mic contacts.
(before IR, old school WIRED remotes for VCRs used resistance for different functions)
Now your homework to find out what is going on is:
measure the resistance between ring 2 and the sleeve for each one of your buttons
find out if it is a momentary short, or constant
if you have some other headphone/mic device that works correctly, measure those impedance (resistance) too
I don't know how into this you want to get, but you can buy resistors with the correct impedance to get the functions you want out of the Android device, the question is, do you know what functions the device is capable of, and what those impedances are that trigger that function.
daniel#destinypatrolsoftware.com

Machine that can turn phone 90 degrees every few seconds?

I want to detect memory leaks in my Android application. Some leaks could be detected while rotating the phone physically so that the activities are constantly recreated.
I'm looking of some sort of physical device that could turn the phone 90 degrees every X seconds. I could build something using lego Mindstorm (that would actually be very cool), but I'm looking for something cheaper.
I also thought of using a clock, but I couldn't find one that has a clock second hand strong enough. Futhermore if the phone rotate 360 degrees after some time the USB cable would become too twisted. I think a device that goes back and forth between horizontal and vertical would be perfect.
My dream testing machine would also allow me to plug a USB cable so that I can run the Monkey tool while constantly rotating the phone.
Why don't you just force the orientation change or destroy and recreate the views every X seconds? I think it's more reliable than a mechanical approach. I can also recommend you this : http://developer.android.com/guide/developing/tools/monkey.html
You need to trigger configuration change somehow. This might be orientation change, hardware keyboard is opened or hidden, or any other change listed here: android:configChanges.
And there is one way to change configuration without using physical approach. You can use "Car Mode" or "Night Mode". Both only work in Android 8+ and can be turned on/off using UiModeManager.
So you can write your custom Service that will periodically call UiModeManager.enableCarMode(0) and UiModeManager.disableCarMode(0);, which in turn will force configuration changes in your Activity under test.
Perhaps http://mindstorms.lego.com/ Lego MindStorms? To be fair, it's about $250 so not really "throwaway cheap" but the advantage of being fully programmable might outweigh that.
As far as I know it's the cheapest robot kit out there which is why universities and schools use it.

Categories

Resources