0

我必须编写一个可以用作“设备硬件管理员”的应用程序。用户应该能够根据自己的喜好启用或禁用硬件的任何功能。我在下面添加应用程序 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 和蓝牙的广播。我没有收到有关相机动作或 USB 连接和断开的广播。

问题 1:我用于相机和 USB 检测的意图过滤器有什么问题吗?

第 2 步:我想阻止用户使用这些硬件。通过检测接收器类的 onReceive() 方法中的操作,我设法在用户启动蓝牙或 wifi 后禁用它。

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;

    }

} 

因此,它会检测到蓝牙或 WiFi 已打开或连接,并以编程方式将其关闭或断开连接。

但要求是用户根本不能启动蓝牙或 WiFi。这意味着禁用WiFi和蓝牙的按钮。

问题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 模块,然后在任何设备上安装该 ROM 模块。

于 2012-11-16T11:31:01.663 回答