Testing touchscreen with Android Emulator? - java

Is it possible to simulate or test Touchscreen input with the Android Emulator?
I'm working on a project which needs to support touchscreen input, but I don't have an Android phone myself. However if I could use my mouse to simulate/test touchscreen support in my app, it would be perfect.

Yes, you can implement the OnTouchListener and then on the emulator you can use your mouse.
A small tutorial here
http://www.mybringback.com/tutorial-series/3279/android-the-basics-32-androids-ontouchlistener-and-motionevent/

It's theoreticaly possible. But to date multitouch support requires a real Android 4.0 device to send multitouch input to the emulator. However, in this case you don't need the emulator and can test directly on the physical device.
You can read latest information about multitouch support here.

Related

Emulated DJI Mobile SDK keeps

In the context of an university project, we want to develop an Android app (Java) using the DJI Mobile SDK (4.11) to control a DJI Mavic 2.
Our created/ downloaded apps like the DJI SDK samples can be run on mobile phones after building them as APKs but we didn´t accomplish to emulate them in Android Studio (3.5.1). Already read that it wouldn´t be possible but developing an app without testing it in the IDE won´t be practicable for us...
Is there any option?
Thanks in advance.
The best option, and one I tend to leverage is use the simulator. I almost bench fly more than I fly outside.
I cannot think of another option of hand.

Developing android apps for Zebra devices

My simple query is that how different are the zebra devices from normal android devices?
Also if we develop android apps for normal android devices will it work on zebra devices?or vice versa?
Also what are the android versions supported on Zebra devices?
we need to have simple app with GPS trailing/tracking and data entry on zebra devices?
Can any one suggest how to start with development?
Thanks,
Zebra offers two variants of android running on their devices, GMS or non-GMS (Google Mobility Services). In either case you will have access to all the standard Android APIs but on GMS devices you also have access to the full range of Google Play Services. You can develop an application that runs on both Zebra and non-Zebra devices, the only complication is the scanning SDK (EMDK) will need to be specified in your gradle file in rather than as an add-in (http://techdocs.zebra.com/emdk-for-android/6-4/guide/programming_practices/#emdkasadependencyinbuildgradle). The version(s) of Android supported on Zebra devices vary depending on the device type, most of the devices right now are running Lollipop or Marshmallow. Not all devices support GPS (since some are targeted for indoor use-cases like warehouses) so make sure your device supports that.
The best place to start development would be the Zebra docs page which gives an overview of your development options: http://techdocs.zebra.com/help/
For transparency, I work for Zebra

Android Camera2 API Flash doesnt work on galaxy devices

I am using the Android Camera2 API to take photos for an app and I can't get the flash to work properly on most Samsung Galaxy devices (galaxy s6 edge, galaxy s7, galaxy j7). I believe I have implemented the flash logic properly because Google's Camera app that used to be on the Play Store also exhibits the same behaviors. Also the galaxy s8 seems to work with the flash pretty well (although results definitely have inconsistent lighting)
The issue with the galaxy j7 is that when I take a picture with flash (either with flash locked on or with auto flash in a scene that requires flash) the flash will stay on for a long time, the preview will lock, and then after maybe 7 seconds the image will take, and the flash is not a part of the image.
I have the following method handling flash modes:
private void setAutoFlash(CaptureRequest.Builder requestBuilder)
{
switch (mFlashState)
{
case FLASH_STATE_AUTO:
requestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH);
//requestBuilder.set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_OFF);
break;
case FLASH_STATE_ON:
requestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_ALWAYS_FLASH);
//requestBuilder.set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_SINGLE);
break;
case FLASH_STATE_OFF:
requestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON);
//requestBuilder.set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_OFF);
break;
}
}
This flash logic is called every time a CaptureRequest.Builder is needed
The 3 commented out lines are something else I read that was suggested to help flash work properly for me, but it doesn't seem to do anything
Samsung has their own camera API (http://developer.samsung.com/galaxy/camera)
but I read that it is just a wrapper over Camera2 and I am worried that their API won't even fix my issue.
Additional Information:
I have tried some camera apps from the play store, some work and others don't.
ZCamera works fine with flash, which made me think they use Samsungs camera API to get it working, but then I noticed that ZCamera's touch metering doesn't work on Samsung devices which is another issue I came across while debugging my Camera2 implementation.
Flash seems to work fine if I stick with the deprecated Camera API
Any help on how to accomplish a working flash would be greatly appreciated
Actually using camera2 API is very special in android devices. Some methods may not be implemented. For example: this and this.
For the others, proper flash modes should be set depends on the other properties.
This code works for me in most Samsung devices that support camera2API:
if (mIsFlashSupported) {
switch (mFlashMode) {
case FLASH_MODE_ON:
requestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON);
requestBuilder.set(CaptureRequest.FLASH_MODE, CameraMetadata.FLASH_MODE_SINGLE);
requestBuilder.set(CaptureRequest.CONTROL_AWB_MODE, CaptureRequest.CONTROL_AWB_MODE_FLUORESCENT);
break;
case FLASH_MODE_OFF:
requestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CameraMetadata.CONTROL_AE_MODE_ON);
requestBuilder.set(CaptureRequest.FLASH_MODE, CameraMetadata.FLASH_MODE_OFF);
requestBuilder.set(CaptureRequest.CONTROL_AWB_MODE, CaptureRequest.CONTROL_AWB_MODE_DAYLIGHT);
break;
case FLASH_MODE_AUTO:
default:
requestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CameraMetadata.CONTROL_AE_MODE_ON_AUTO_FLASH);
requestBuilder.set(CaptureRequest.FLASH_MODE, CameraMetadata.FLASH_MODE_SINGLE);
requestBuilder.set(CaptureRequest.CONTROL_AWB_MODE, CaptureRequest.CONTROL_AWB_MODE_DAYLIGHT);
break;
}
}
After working at this on and off for a bit I realized a few things. I mentioned that ZCamera (from the play store) works with flash, and I thought they accomplished this by using the Samsung SDK. I checked the app and it does not use the Samsung SDK.
I also incorporated the Samsung SDK into my app and that didn't change anything. The Samsung SDK is really just a wrapper around google's camera 2 so you can add some Samsung specific features, adding it to your project wont fix any Samsung compatibilities.
What I finally realized was that the touch metering flow I had programmed myself (touch to focus/then take a photo) worked very differently than my logic that ran when we take a photo without touch to focus. The regular photo logic was borrowed from googles camera2 api example code and it wasnt working propery.
The trick to get the flash to fire on Samsung devices (or at least what worked for me) was to first trigger a check for AE levels, and once that converges then start the auto focus trigger. If flash is turned on this will fire the flash to check AE levels and to focus, and then fire the flash once more to take the photo
My application takes a photo every 5 seconds. I (1) select the camera, (2) acquirer a session and then with each loop I (3) create a Capture request in which I set the Flash Mode and call the capture method on the session.
I have no issues with my Samsung SM-G550T (Android version 6.01), but I was having some issues with the Flash Mode on my Moto G4 (Android version 7.0). I got both phones to Flash, but only with this setting:
CaptureRequest.Builder requestBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE);
requestBuilder.set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_SINGLE);
I am presently having an issue with a LG device (M210N) (Android version 7.0). Using the settings I stated above I get the device to flash just once. If I completely re-initialize the camera (as described above) the device will flash again only once.
If I add the CONTROL_AE_MODE_ON_ALWAYS_FLASH setting to the above requestBuilder, then the LG does not flash at all. So I had to remove that flag.
I have tried many different additional settings and combination for settings and none of them have eliminated this issue. I wonder how many devices are affected by this issue.

How does Mobizen for Samsung record Samsung Android devices' screen?

Came across an Android App called Mobizen for Samsung. It can record screen for android 4.2 and above without root, without USB, without adb. It just works.
It seams to just work for Samsung phone. I didn't test on other brands.
Any of you guy knows how do they do that programmatically? What APIs are they using? Thanks a lot.
It appears they have a special relationship with Samsung, which probably allows the app hooks into the OS. There is another version for Mobizen called Mobizen for Android that is for everything else but Samsung devices.

How to recrod our screen of android emulator operations

I am automating my android app through Appium in Emulator. During the test case run, i want to capture all operations performed in the emulator into a video. How can i do this?
As i want to deal with programmatically, are there any APIs supported to do this?
Is there any methods to do this using Java?
I heard that we can record for Android real devices(adb shell screenrecorder), but not for Emulator.
Can someone please help me on this?
Thanks,
Uday
You can consider the emulator itself as a windows application and hence you could record it like any other windows app. For a more platform independent option, there are a few java libraries with api.

Categories