我已经实现了两个Sub apply_Error_Control()
Dim cel As Range, _
RangeInForumla As String
For Each cel In Selection.Cells
If cel.HasFormula Then
RangeInForumla = Replace(cel.Formula, "=", "",1,1)
cel.Formula = "=IF(" & RangeInForumla & "=0," & Chr(34) & Chr(34) & "," & RangeInForumla & ")"
End If
Next cel
End Sub
,用户应该能够在运行时启用或禁用它。
activity-alias
我不希望在开始时启用它们,以免弄乱用户设备的应用程序屏幕。但在运行时,用户应该能够启用别名。我通过<activity-alias
android:name=".ui.alias.open_location"
android:targetActivity=".ui.activity.location"
android:enabled="false">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity-alias>
:
PackageManager
这在开头就像魅力一样,但是当安装了我的应用程序的更新时,别名会再次被禁用。如何防止系统被清单覆盖启用状态?我不希望用户在开始时使用Launcher,我不希望用户在更新后重新创建所有别名快捷方式。
我想我需要类似于PackageManager pm = getApplicationContext().getPackageManager();
ComponentName componentName = new ComponentName(context, ".ui.alias.open_location");
pm.setComponentEnabledSetting(componentName,
PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
PackageManager.DONT_KILL_APP);
的东西,但仅限于启用状态。
谢谢!
答案 0 :(得分:8)
启用或禁用组件的所有配置都保存在设备的此路径中(0表示设备的第一个用户):
using System.Threading;
string cultureName = "fr-CA";
Thread.CurrentThread.CurrentCulture = new CultureInfo(cultureName);
DateTime theDate = new DateTime(2015, 11, 06);
theDate.ToString("g");
Console.WriteLine(theDate);
XML的格式是这样的(您只能从root设备中提取文件):
/data/system/user/0/package-restrictions.xml
更新应用时,即使您清除应用数据,启用或禁用的组件也会保持不变。
丢失此设置的唯一情况是包名称或组件名称发生更改。
我认为您的问题是由于组件名称的更改(可能是ProGuard / DexGuard的一些奇怪配置),因为您无法在Play商店上传具有不同包名称的更新。
您可以尝试反编译APK并验证该应用中组件的名称是否相同。
答案 1 :(得分:1)
保存用户在SharedPreferences中选择的选项,并在更新后重新应用它们。为此,您还可以save in preferences the version number,以便了解何时需要应用此功能。
正如您在this回答中所看到的,可以肯定地说这些首选项会保留在应用更新中,因此可能会为您的问题提供解决方案。