0

「デバイスハードウェア管理者」として機能するアプリケーションを作成する必要があります。ユーザーは、好みに応じてハードウェアの機能を有効または無効にできる必要があります。以下にアプリケーションUIのスクリーンショットを追加します。

アプリケーションUI

これらの設定は、アプリケーションのローカルデータベースに保存されます。私が何とかしたことは次のとおりです。

ステップ1:これらすべてのアクションを検出するためのブロードキャストレシーバーを登録しました。

<receiver android:name=".HardwareActionListener" >
    <intent-filter>
        <action android:name="android.intent.action.CAMERA_BUTTON" >
        </action>

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    <intent-filter>
        <action android:name="android.media.action.STILL_IMAGE_CAMERA" />
    </intent-filter>
    <intent-filter>
        <action android:name="android.hardware.action.NEW_PICTURE" >
        </action>
    </intent-filter>
    <intent-filter>
        <action android:name="android.media.action.IMAGE_CAPTURE" />

        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
    <intent-filter>
        <action android:name="android.intent.action.UMS_CONNECTED" />
    </intent-filter>
    <intent-filter>
        <action android:name="android.intent.action.UMS_DISCONNECTED" />
    </intent-filter>
    <intent-filter>
        <action android:name="android.bluetooth.adapter.action.STATE_CHANGED" >
        </action>
    </intent-filter>
    <intent-filter>
        <action android:name="android.net.wifi.WIFI_STATE_CHANGED" >
        </action>
    </intent-filter>
    <intent-filter>
        <action android:name="android.net.wifi.WIFI_STATE_CHANGED_ACTION" >
        </action>
    </intent-filter>
    <intent-filter>
        <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />

            <meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
    </intent-filter>
</receiver>

WifiとBluetoothの放送をきちんと受けています。カメラアクションまたはUSB接続と切断に関するブロードキャストが受信されません。

質問1:カメラとUSBの検出に使用したインテントフィルターに何か問題がありますか?

ステップ2:ユーザーがこれらのハードウェアを使用できないようにブロックしたい。ユーザーがBluetoothまたはWi-Fiを起動した直後に、レシーバークラスのonReceive()メソッドでアクションを検出することにより、BluetoothまたはWi-Fiを無効にすることができました。

if (intent.getAction().equalsIgnoreCase(
                "android.bluetooth.adapter.action.STATE_CHANGED")) {

    int extraBTState = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE,
                    BluetoothAdapter.ERROR);
    switch (extraBTState) {
        case BluetoothAdapter.STATE_CONNECTING:
            BluetoothAdapter mBluetoothAdapter = BluetoothAdapter
                        .getDefaultAdapter();
            mBluetoothAdapter.disable();
        break;
        case BluetoothAdapter.STATE_ON:

            BluetoothAdapter mBluetoothAdapter1 = BluetoothAdapter
                        .getDefaultAdapter();
            mBluetoothAdapter1.disable();
        break;
        case BluetoothAdapter.STATE_CONNECTED:

            BluetoothAdapter mBluetoothAdapter2 = BluetoothAdapter
                        .getDefaultAdapter();
            mBluetoothAdapter2.disable();
        break;
        case BluetoothAdapter.STATE_OFF:
            Toast.makeText(context, "Bluetooth access not allowed",
                        Toast.LENGTH_SHORT).show();
        break;
    }

} else if (intent.getAction().equalsIgnoreCase(
                "android.net.wifi.WIFI_STATE_CHANGED")) {
    int extraWifiState = intent.getIntExtra(
                    WifiManager.EXTRA_WIFI_STATE,
                    WifiManager.WIFI_STATE_UNKNOWN);
    switch (extraWifiState) {
        case WifiManager.WIFI_STATE_DISABLED:
            Toast.makeText(context, "Wifi enabling not allowed",
                        Toast.LENGTH_SHORT).show();
        break;

        case WifiManager.WIFI_STATE_ENABLED:

            WifiManager wifiManager1 = (WifiManager) context
                        .getSystemService(Context.WIFI_SERVICE);
            wifiManager1.setWifiEnabled(false);
        break;
        case WifiManager.WIFI_STATE_ENABLING:

            WifiManager wifiManager2 = (WifiManager) context
                        .getSystemService(Context.WIFI_SERVICE);
            wifiManager2.setWifiEnabled(false);
        break;

    }

} 

そのため、BluetoothまたはWiFiがオンまたは接続されていることを検出し、プログラムでオフまたは切断します。

ただし、ユーザーがBluetoothまたはWiFiをまったく起動できないようにする必要があります。つまり、WiFiとBluetoothのボタンを無効にします。

質問2:それは可能ですか?

どんな助けや提案もいただければ幸いです。

4

2 に答える 2

2

関連するAPIはandroid-14以降で利用できます:http ://developer.android.com/reference/android/app/admin/DevicePolicyManager.html#setCameraDisabled(android.content.ComponentName 、boolean)

于 2012-11-17T06:05:17.710 に答える
1

カメラとUSBの検出に使用したインテントフィルターに何か問題がありますか?

はい。例えば:

  • <category>通常、放送では使用されません。また、LAUNCHERカテゴリではありません。
  • android.media.action.STILL_IMAGE_CAMERAフィルタ内の他のアクションはアクティビティアクションであり、ブロードキャストアクションではありません

質問2:それは可能ですか?

SDKアプリからはできません。ソースコードをAndroidにダウンロードし、ニーズに合わせて変更し、そこからROM modをコンパイルしてビルドしてから、そのROMmodを可能な限りのデバイスにインストールしてください。

于 2012-11-16T11:31:01.663 に答える