17

BlueStacks Android エミュレーター内で実行されているかどうか、Android アプリ内で実行時に確認したいと思います。これは、BlueStacks 内でアプリを実行するときのアプリの実行方法を変更できるようにするためです。

BlueStacks はマルチタッチをサポートしていないため、現在のアプリにある標準のピンチ ツー ズーム機能に代わるものを実装したいと考えています。

例えば

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

appIsRunningInBlueStacks の値を確認する信頼できる方法は何ですか?

編集 質問に対するコメントへの回答の要約:

ベン、タラス、提案をありがとう。BlueStacks の Build.MODEL などの値は次のとおりです。

  • 型式:「GT-I9100」

  • メーカー:「サムスン」

  • デバイス:「GT-I9100」

  • 商品名:「GT-I9100」

これは Samsung Galaxy SII と同じモデル番号であるため、SII を使用するすべてのユーザーを BlueStacks と同じように扱うことを恐れて、これを使用することは理想的ではありません。

CommonsWare では、マニフェストにマルチタッチ用の < uses-feature> があっても、アプリは BlueStacks で引き続き実行されます。実際(iagreenの質問にも答えています)...

packageManager.hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN_MULTITOUCH_DISTINCT);

... true を返します! エミュレーターが Samsung Galaxy SII であると確信しているため、これは当然のことです。

したがって、すべての Samsung Galaxy SII ユーザーを同じバケットに入れることなく、アプリが BlueStacks で実行されているかどうかを確実に検出する方法はまだありません。他のアイデアはありますか?

4

7 に答える 7

4

Bluestacks 共有フォルダーが存在することを確認できます /sdcard/windows/BstSharedFolder

    Boolean onBlueStacks()
        {
        File sharedFolder = new File(Environment
                .getExternalStorageDirectory().toString()
                + File.separatorChar
                + "windows"
                + File.separatorChar
                + "BstSharedFolder");

        if (sharedFolder.exists())
            {
            return true;
            }

        return false;
        }
于 2015-10-23T16:00:42.297 に答える
2

My version of BlueStacks is reporting my Build.Model as GT-N7100.

Using: android.opengl.GLES20.glGetString(android.opengl.GLES20.GL_RENDERER) I get Bluestacks.

于 2015-01-23T20:00:53.500 に答える
-1

これはユニークです。

Bluestack には Bluetooth デバイスがありません。

そのため、Bluestack または Any emulator では常に「null」である Bluetooth アドレス文字列を取得してみてください。プロジェクト マニフェストに Bluetooth 権限を追加していることを確認してください。

BluetoothAdapter m_BluetoothAdapter = BluetoothAdapter.getDefaultAdapter();

 String m_bluetoothAdd = m_BluetoothAdapter.getAddress();
于 2016-05-14T12:16:51.237 に答える
-1

Regisさんの回答に基づいて、共有フォルダーが存在する場合に検出できます。ただし、Bluestacks 4 では、使用file.exists()すると false のみが返されます。これは、共有フォルダーに権限がないためです (000または----------)。ただし、ディレクトリ内のファイルを一覧表示すると、フォルダーが検出されます。

String path = Environment.getExternalStorageDirectory().toString();
Log.d("FILES", "Path: " + path);
File directory = new File(path);
File[] files = directory.listFiles();
for (File file : files) {
    if (file.getName().contains("windows")) {
        Log.d("FILES", "windows file exists, it's a bluestacks emu");
    }
}
于 2019-01-29T13:19:04.960 に答える