I would like to ascertain at run-time inside an Android app whether it is running within the BlueStacks Android emulator. This is so I can modify the way the app runs when running inside BlueStacks.

BlueStacks does not support multi-touch so I want to implement an alternative to the standard pinch-to-zoom functionality my current app has.

E.g.

If (appIsRunningInBlueStacks){
    mySurfaceView.enableMultiTouchAlternatives();
} else{
    mySurfaceView.enableMultiTouchFeatures();
}


What is a reliable way of ascertaining the value of appIsRunningInBlueStacks?

EDIT Summary of answers to comments on question:

Ben, Taras, thanks for the suggestions. The Build.MODEL etc. values for BlueStacks are:


Model: "GT-I9100"
Manufacturer: "samsung"
Device: "GT-I9100"
Product: "GT-I9100"


This is the same model number as the Samsung Galaxy SII so it would not be ideal to use this for fear of treating all users with SIIs the same as those on BlueStacks.

CommonsWare, the app continues to run in BlueStacks even with the &lt; uses-feature> for multitouch in the manifest. In fact (also answering iagreen's question)...

packageManager.hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN_MULTITOUCH_DISTINCT);


... returns true! This is to be expected I suppose as the emulator is convinced it is a Samsung Galaxy SII!

Therefore we are still without a way of reliably detecting whether an app is running on BlueStacks without also throwing all Samsung Galaxy SII users in the same bucket. Any other ideas?


Question: c# parsing json: error reading json object
Answer: Personally, the cleanest approach to take is to define a class for the object signature you're expecting to take in:

class Entity {
    public he_ident { get;set; }
    public le_ident { get;set; }
}


Then just call DeserializeObject() into a collection:

var entities = JsonConvert.DeserializeObject&lt;List&lt;Entity&gt;&gt;(json2);


You should be able to access that then just like any C# object:

foreach(var entity in entities) {
    Console.WriteLine(entity.he_ident);
    Console.WriteLine(entity.le_ident);
}


This won't work if your JSON signature is dynamic though (or will be a bit tedious, as you'd have to define classes for each of your signatures).

But personally, I find that this approach does away with the muckiness that stuff like ArrayList had, and introduces strict typing into your code, which I find to generally lend itself to stronger, cleaner structure in a C# environment.