Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to detect programmatically if "Android App" is running in chrome book or in Android phone

Tags:

Since Google has announced that chromebook also support "Android Application" so I also wanted to support my app on chromebook although it is running fine with few exception which I need to fix.

I want to write code in such a way that that is will execute only for chromebook and will not execute for android phones and tablet.

I have check with Chromebook documentation in android developer site, I didn't get any such API which tell that your app is running in chrome book environment.


Suggestion from ARC Beta documentation did not work:

If you need to check if your app is running on Chrome OS, look for chromium as the android.os.Build.BRAND and android.os.Build.MANUFACTURER.

Both return google on an ASUS Chromebook.

like image 686
dex Avatar asked Sep 30 '16 05:09

dex


People also ask

Do Android apps run on Chromebooks?

You can download Android apps from the Google Play Store app and use them on your Chromebook. Currently, the Google Play Store is only available for some Chromebooks.

Are Android apps sandboxed on Chromebook?

The Chrome OS has taken advantage of recent work by Docker and other cloud containers to give Chromebooks Android-app compatibility. The full Android framework is implemented in a Linux container that isolates Android from the rest of the Chrome OS and apps in a sandbox.

How do I know what version of Android my Chromebook is running?

Connect your Chromebook to Wi-Fi. Settings . At the bottom left, select About ChromeOS. Under "Google ChromeOS," you'll find which version of the Chrome operating system your Chromebook uses.


2 Answers

Finally I figure out a way to know if app in running in ARC:

context.getPackageManager().hasSystemFeature("org.chromium.arc.device_management"); 
like image 73
dex Avatar answered Oct 18 '22 19:10

dex


Another method Google uses in their own code (updated link) is to check if Build.DEVICE ends with "_cheets". I don't know if ending device names like this is some kind of long-term strategy or a fast workaround, but it's also worth a look in addition to dex's proposed solution.

FWIW, since ARCWelder's method is deprecated and there's no official documentation on this (yet), I've also started a discussion in the XDA forums here for people to discuss what works/doesn't work on various devices.

Update 5/18: Looks like the code above was moved and updated, so Google's new ARC check as of May 2018 is here, particularly in this bit:

... } else if (Build.DEVICE != null && Build.DEVICE.matches(ARC_DEVICE_PATTERN)) {   mFormFactor = FORM_FACTOR_ARC; } else { ... 

where ARC_DEVICE_PATTERN is defined as

private static final String ARC_DEVICE_PATTERN = ".+_cheets|cheets_.+"; 

So it's not just a device ending with _cheets. It can start with cheets_ as well.

Update 8/26/20 -- As of 7 months ago, the source has been moved around from FormFactors.java to FeatureSupport.java. If you were looking for where it went- here it the code as of today.

  public static boolean isArc() {     return (Build.DEVICE != null && Build.DEVICE.matches(".+_cheets|cheets_.+"));   } 

The test remains the same.

like image 20
fattire Avatar answered Oct 18 '22 18:10

fattire