我必须编写一个可以用作“设备硬件管理员”的应用程序。用户应该能够根据自己的喜好启用或禁用硬件的任何功能。我在下面添加应用程序 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:这可能吗?
任何帮助或建议将不胜感激。