我想将托管的iOS设备部署到公司的员工,他们将使用的应用程序将为本地记录的数据加时间戳,然后转发.我需要这些时间戳是正确的,所以我必须阻止用户调整设备上的时间,记录一个值,然后重置日期和时间.日期和时间将被配置为自动来自网络,但设备可能始终没有网络连接(否则每次记录数据值时我只会读取网络时间).我还没有在Apple Configurator中看到一个选项来阻止更改日期和时间,那么有没有其他方法可以做到这一点?
我正在尝试最小化我需要设置StrictMode的代码中的位置数.但我不确定我是否对以下内容有所帮助.
Android的StrictMode文档说您可以将它用于应用程序,活动和其他组件.我已经读过扩展Application类是不可取的,我不想仅仅为了启用StrictMode而扩展Application.但我不认为我必须这样做.
您可以使用两种策略:ThreadPolicy(用于线程)和VmPolicy(用于所有线程).所以看起来如果我在一个线程上设置一次StrictMode,那么我从哪里开始并不重要,并且此后将在该线程上报告违规,而不管StrictMode上是否有其他调用.我只需要在我想要检测到的违规行为之前从某个地方调用它.并且需要为我想要检查的应用程序中创建的任何新线程设置它.
我认为我想避免的是调用build()方法而不是我需要的.将StrictMode放在onCreate()我所有活动的开头,意味着build()将在该线程上被多次调用.如果我的应用程序中有一个Launcher活动,那么在该活动中设置StrictMode onCreate()应该足以满足应用程序的其余部分.真的吗?
其次,如果我的主要活动重新启动,即使应用程序没有死亡,技术上是否需要再次调用StrictMode?或者我的线程仍设置为报告违规?我认为在StrictMode周围做一个包装类的类可能有一些价值,如下所示:
public class MyStrictModeSettings {
static private List<Long> setThreads = new ArrayList<Long>();
// Prevent instantiation of this class
private MyStrictModeSettings() {}
static public synchronized void init() {
try {
Long tid = Thread.currentThread().getId();
if(!setThreads.contains(tid)) {
setThreads.add(tid);
Class sMode = Class.forName("android.os.StrictMode");
Method enableDefaults = sMode.getMethod("enableDefaults");
enableDefaults.invoke(null);
}
}
catch(Exception e) {
// StrictMode not supported on this device, punt
Log.v("StrictMode", "... not supported. Skipping...");
}
}
}
Run Code Online (Sandbox Code Playgroud)
这样,在我的主要活动的onCreate()中,我可以简单地调用MyStrictModeSettings.init()并完成它.它也适用于2.3之前的Android版本.但它可能不值得.布拉德,你呢?谢谢.
编辑:由于VmPolicy适用于所有线程,从技术上讲,我只需要为每个应用程序设置一次,对吧?因此,当调用第二,第三等时间时,enableDefaults()会浪费精力重做VmPolicy吗?再一次,也许比试图避免额外呼叫更值得麻烦.