We have an industrial app running on stock Samsung Android devices. Because it's an industrial app we are trying to have it "take over" the device. We've got this pretty well working by setting in the manifest
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.DEFAULT" />
and by intercepting the Android "back" key via onBackPressed and doing nothing.
Our one remaining conundrum is that Samsung's UI layer, 'Touch Wiz', has a pull-down menu that the user can pull down over the top of our app and access other features from. We're trying to disable that.
Is there anything we can intercept that the way we did the the back button to block that? Any other way to block it?
(if someone suggests "rooting" the device, what could I do as root that would help here?)
Thanks in advance!!
Which stock samsung device are you working with?
and by pull down menu are you speaking of the Notification Bar?
If so this is not a UI feature that is specific to TouchWiz, they may have modified what all can be accessed from the expanded notification bar. But this element exists in stock android as well.
If this is what you are referring to you can set a full_screen flag on your activity or application elements in your manifest. This will hide the notification bar while inside your application.
android:theme="#android:style/Theme.NoTitleBar.Fullscreen"
If it does not work with fullscreen mode home app:
A stock Android has no way to do real kiosk mode and I guess it's not a goal of Android to allow this since you could do evil things with that like build apps that force you to pay money before you can leave them again.
Root will not help here too since that's about the underlying Linux which allows you to access internal files etc. That does not unlock some magically hidden APIs.
What you would need to do is build your own firmware for the device (there might exist something for the device - look in http://forum.xda-developers.com/). In that firmware you are free to change those internals that allow users to escape your app.
Related
My app is fully usable and navigatable on AndroidTV using the DPad. Well, it certainly is on MY AndroidTV, as well as AVD.
However, Google keeps on rejecting my appeal to have it marked as AndroidTV capable.
There is no feedback, other than
Missing DPad functionality Your app requires user interaction for
menus or app navigation. Please make sure that all menus and app
navigation are fully functional using a DPad. Please refer to our DPAD
Control and Hardware Declaration documentation.
Do you know if they actually test these apps, or do they just look for certain code patterns? The message from them looks automated, and I've not spoken to a person yet.
Would it help if I recorded my app in use and sent them a link to the demonstration?
In my case there were 3 problems.
I had a "Refresh" button that when pressed it was downloading a new image and replaced the current, to the automatic google testing machines - it looks like nothing happens, it was the same image. the fact that I used different drawable to show pressed/released/focused state had nothing to do with it. For those testing machines, if nothing happens then this button has no functionality and the DPAD probably is not working. I have added a simple Toast message that launches every time a user presses the button.
I have contacted support from the link in the rejection email - they are very supportive. they have sent me explanation that includes an old screenshot. apparently - they were using an old version - I don't know why. After explanation - they checked the correct one.
also, they test mostly the production version while most of my development was on the beta version. advance your version to production. in my case partial release of 5 percent was good enough for them to test the new production version.
after all of those measures - 12 hours later - I was approved. Now, I have removed the toast and my app was still accepted.
AndroidTV applications support and expects leanback activities. Also, D-pad needs to minimum remote controller support like up, down, left, right, select, Back, and Home buttons.
D-pad minimum controls
The default controller for a TV device is a D-pad. In general, your app should be operable from a remote controller that only has up, down, left, right, select, Back, and Home buttons. If your app is a game that typically requires a game controller with additional controls, your app should attempt to allow gameplay with these D-pad controls. In this case, your app should also warn the user that a controller is required and allow them to exit your game gracefully using the D-pad controller. For more information about handling navigation with D-pad controller for TV devices, see Create TV navigation.
Adding the below lines to your main activity in AndroidManifest.xml may help Dpad support.
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.LEANBACK_LAUNCHER" />
</intent-filter>
If its not working and these lines already in manifest please share your manifest file.
I have an customer project where I have to make single task android device. Customer isn't able to escape the application which my company have developed. Also customer isn't able to start any other application and our application is started when the device is booted. Overall all the customer is able to do with the device is run our application.
Is there any other way to make this work than rooting the device, disabling all system buttons and making our application the launcher. I have something like 400 devices for this purpose so rooting all those would cost lot of time.
I also read Google's tutorial about COSU devices but found it very confucing https://developer.android.com/work/cosu.html#testing-plan
Androids own screen pinning is not good enough because customer can escape the app. Some may suggest to use some kiosk application like SureLock but my company's goal is to find clear solution for this without using any third party apps. Also running our app via some kiosk application is not our goal.
I found some posts on the Stack Overflow with similar question, but not the answer I'm looking for.
If someone has some tips for this question I would be very grateful.
Single purpose devices built on top of Android can get difficult to implement. There are a few different options, but each have trade-offs.
As you mentioned, rooting devices will functionally get you what you want - however it will be time consuming with hundreds of devices to root, difficult to maintain, and you will (potentially) introduce security issues to your devices and app.
Another option is using Google's Lock Task Mode for COSU devices[1]. The link there has a nice graphic showing the features of lock task mode:
1 app pinned to the home screen
only apps white-listed by the DPC (device policy controller) can be locked
Home and Recent buttons hidden
exit by calling stopLockTask()
There are some downsides to using Google's solution for this. First Google recommends creating (and therefor maintaining) an entirely separate DPC app to run as a device owner and set policies[2]. You'll also be dependent on Google Play to manage application updates and be required to have Play accounts associated with each device which "are used to identify a single device that is not tied to a single user for simplified, per-device app distribution rules in COSU-style scenarios"[3]. To automatically get your DPC app on devices your "DPC must be publicly availble on Google Play, and the end user can install the DPC from the device setup wizard by entering the DPC-specific identifier."[3] You'll also need to upload the user application to Google Play[4], which may be an issue for some who don't want their apps on Play. Going this route gives you features you need, but can be complicated and also ties you and your customer pretty tightly with Google/Play services and their workflow.
You can also look at enterprise mobile deployment platforms like Mason[5]. In your case, you can create a custom Android OS in a few minutes with your app locked in kiosk mode (+ other features like disable camera/sms, remove apps and hide settings, etc.) and then deploy it to all of your devices remotely. Mason also supports OS and app updates controlled by you if your requirements change.
DISCLAIMER: I work for Mason
[1] https://developer.android.com/work/cosu.html
[2] https://developer.android.com/work/cosu.html#create-dpc
[3] https://developers.google.com/android/work/requirements/cosu
[4] https://developers.google.com/android/work/play/emm-api/samples#push_install_an_app_on_a_device
[5] https://bymason.com/
I went to the same problem before. I spent at least 3 days doing research. I tried to find many solutions but I found zero.
How I solve is
1. Up To JellyBean
- Use System Alert Dialog (And make it transparent and small size like 2 * 2 And display in some corner(User can't see it)). User can't press home button If there is system Alert dialog
2. After JellyBean, This method doesn't work. The user can press the home button even though there is System Alert Dialog.
so what I did is, start the service on stop and start the same activity again and again(within sec). So user can't see any difference.Don't forget to make activity as single task so that even though you start same activity from service, again and again, new activity will not create (So Ugly way )
- You can simple make screen full screen. make sure in kiosk mode try to check if the screen is in full-screen mode. if not make it full-screen mode(its not hard to do)
- other way is to make launcher app but when ever you pressed home button it always asked to choose launcher app. if user mistakenly choose default/ other launcher app, this solution doesnt work
Good luck
Make your application as a launcher application by defining in manifest file.
After that go to setting of your mobile device and change default launcher application to your application.
I'm going to write an application for a special device. The device's OS is android and it connects to a TV with HDMI cable and has a remote control as input hardware.(Like a video player) I need these to be done:
When the user works with it, it should not be clear that the OS is android.
User could not access to the OS system options like "Action bar" or "Setting menu" or etc.
My app be the default app of the system and it runs at start up before any other app even the launcher.
so,
How can I change the android boot logo ?
How can I set my app to be the default application? May I need to set it as launcher?
how can I disable all other android UI tools like launcher and action bar permanently? (even my application close they should not be shown)
May I need a rooted android ? and witch version has these possibilities ?
I've found my answers and share it to others.
How can I change the android boot logo ?
In some devices there is a file in system/media/bootanimation.zip
can be edited and replaced.(When creating zip file should choose
Store in compresstion type.)
In some devices there is a file in system/etc/bootvideo thats in
MP4 file format simply can be replaced.
How can I set my app to be the default application? May I need to set
it as launcher?
Yes, simply add android.intent.category.LAUNCHER to first activity category in the manifest like this:
<activity android:screenOrientation="landscape" android:name=".ActivityStarter">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
How can I disable all other android UI tools like launcher and action bar permanently? (even my application close they should not be shown)
Uninstall all other launcher on the device. also for notification bar you can remove Android UI in system apps. Note that be sure your app is running correctly and does not crash, if not you will lose access to the device.(I installed ES Explore on the device and run it with a hidden button in my app to access my android system tools.)
May I need a rooted android ? and witch version has these possibilities ?
Yes. In this case I used Android 4.4.2 but think other versions would be so.
Android 5.0 supports pinning an app. There's also an app called AppLock that may be relevant.
Im develping an app using apk 12 for 10.1 inch galaxy tablet. I would like to design a home screen only with my apps icon so that user will not be able to access anything else. Can I do that ? If yes, how ??
I would like to design a home screen only with my apps icon so that user will not be able to access anything else. Can I do that ?
Yes, it is possible to create a home screen application.
If yes, how ??
There is a Home sample app in your Android SDK installation (assuming you installed the samples from the SDK Manager). It largely boils down to having an activity with an <intent-filter> using CATEGORY_HOME.
Note that the user who installs your app will have the option of choosing between your home screen and the built-in one. Even if they make your home screen the default one, they will still be able to revert that decision by removing your app:
by booting in safe mode
via the Android SDK (e.g., adb uninstall)
by getting into Settings through notifications and the like
possibly other means
For ur knowledge lot many thing are diff for honeycomb.
For your knowledge, nothing changed in this area with Android 3.0.
Let me begin by saying that, yes, I know that the stock Android lock screen can not be programatically replaced without rooting.
Now that that's over with, I want to make an app that contains a custom 'lock' mechanism. There are apps out there that emulate this functionality, namely LockGo. This allows a user to view information from widgets on a 'lock screen' and emulates the slide-to-unlock functionality (or whack-a-mole if the user wants to install that plugin).
Does anyone know what mechanism or Android API functionality they may have used to do this? Is it as simple as hooking into the power button to launch an activity, such as in the link below?
How to hook into the Power button in Android?
Any insight to this would be appreciated.
I've found out while researching this that, while there is currently no way to replace the stock security or keyguard lock (which I knew), it is possible to show an Activity on top of the lock using the following code in the setup for that Activity:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
This can be used with any logic needed to create a faux lock to show screens on top of the system lock(s), though the lock will still be in tact and the user will need to enter the lock to get into the device.