在 DeviceAdminReceiver 中未收到安全日志的回调

问题描述 投票:0回答:1

我正在开发一个在 Android 上充当设备策略控制器的应用程序,主要侧重于启用和处理安全日志记录。尽管按照文档正确设置了所有内容并启用了安全日志记录,但我没有在 DeviceAdminReceiver 子类中收到 onSecurityLogsAvailable 回调,尽管我能够通过不同的机制接收网络日志。

我的应用程序已通过 ADB 确认为设备所有者。

下面是与启用日志记录和设置 DeviceAdminReceiver 相关的简化代码。

...
 DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);
ComponentName adminComponentName = new ComponentName(context, AppDeviceAdminReceiver.class);

if (dpm.isDeviceOwnerApp(context.getPackageName())) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        dpm.setAffiliationIds(adminComponentName, Collections.singleton("my.unique.id"));
        dpm.setSecurityLoggingEnabled(adminComponentName, true);
        dpm.setNetworkLoggingEnabled(adminComponentName, true);
        Log.d("Setup", "Logging enabled");
        return true;
    }
} else {
    Log.w("Setup", "Not device owner, cannot enable logging.");
    return false;
}
...

AppDeviceAdminReceiver 实现:

public class AppDeviceAdminReceiver extends DeviceAdminReceiver {
    
    @Override
    public void onSecurityLogsAvailable(@NonNull Context context, @NonNull Intent intent) {
        Log.i("AdminReceiver", "Security logs available.");
        // TODO: Handle logs...
    }

    @Override
    public void onNetworkLogsAvailable(@NonNull Context context, @NonNull Intent intent, long batchToken, int networkLogsCount) {
        Log.i("AdminReceiver", "Network logs available, count: " + networkLogsCount);
        // TODO: Handle logs...
    }
}

Manifest.xml 中的AppDeviceAdminReceiver:

        <receiver
            android:name=".AppDeviceAdminReceiver"
            android:permission="android.permission.BIND_DEVICE_ADMIN"
            android:exported="true">
            <meta-data
                android:name="android.app.device_admin"
                android:resource="@xml/device_admin" />

            <intent-filter>
                <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
            </intent-filter>
        </receiver>

我尝试使用错误的代码解锁设备 5 次,启用和禁用蓝牙和 Wifi,使用 adb 安装/卸载应用程序,还使用命令

adb -s device_name shell dpm force-security-logs
强制生成安全日志。尽管如此,我仍然没有收到任何安全日志回调。 另一方面,我能够接收网络日志,但只有当我像 AppDeviceAdminReceiver 中那样使用 onReceive 方法时,而不是通过推荐的 onNetworkLogsAvailable 回调:

@Override
public void onReceive(@NonNull Context context, @NonNull Intent intent) {
    Log.i("AppDeviceAdminReceiver", "Received intent: " + intent.getAction());
}

(我可以忍受这一点,这只是我遇到的另一个可能相关的问题)。

我在不同供应商的多个设备(从 Android 10 到 14)上测试了此行为,但没有成功接收安全日志。

我想知道是否可能有其他配置或权限被我忽略以接收此回调。任何关于为什么这可能行不通的见解或建议将不胜感激。

android device-admin device-policy-manager android-enterprise android-enterprise-features
1个回答
0
投票

我也遇到了同样的问题。

解决方案是重写DeviceAdminReceiver子类中的onReceive()。删除该代码后,我开始收到 onNetworkLogsAvailable() 和 onSecurityLogsAvailable() 的回调

© www.soinside.com 2019 - 2024. All rights reserved.