在Android中制作新的设置应用

时间:2014-12-03 13:23:51

标签: android customization settings.settings

我有点需要帮助的问题。我们正在制作一个设备,我们需要限制用户做很多事情。因此,我们调查了制作自定义启动器,以隐藏某些应用和功能的显示。

但我们还需要做的一件事是限制用户可以从android中的设置菜单/应用设置。看起来改变这个应用程序/菜单中可见/可访问内容的唯一方法是编写我们自己的自定义ROM,我们不想这样做。

所以我想知道的是,我可以在android中编写一个新的设置应用来替换默认设置吗?

提前致谢, 的Wihan

3 个答案:

答案 0 :(得分:1)

简短的回答是,不。设置应用程序与ROM捆绑在一起,是一个特权应用程序,可以访问受保护的设置以及隐藏的API。您可以尝试创建自己的,但必须使用用于对ROM的其他内部组件进行签名的平台密钥进行签名,并且如果内部(非SDK)API也需要针对某些内部组件构建。

答案 1 :(得分:0)

如果您只想限制用户更改设置,可以通过在清单中添加下一行来使您的应用充当其他设置应用

<action android:name="android.settings.SETTINGS" />

例如,如果你正在制作一个启动器应用程序,那么如果你想要将它设置为启动器和启动器活动,那么这就是你在清单中的活动应该是什么样的。

<activity
         android:name=".ExampleActivity"
         android:label="@string/app_name"
         android:launchMode="singleTask"
          >
         <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.HOME" />
            <category android:name="android.intent.category.LAUNCHER" />
            <action android:name="android.settings.SETTINGS" />

        </intent-filter>
    </activity>

答案 2 :(得分:0)

我已使用设备所有者完成此操作。 首先在清单中声明具有意图过滤器的活动

 <!-- Default Activity Intent for Settings App -->
    <activity
        android:name=".ui.DeviceSettings"
        android:label="@string/settings_label">
        <intent-filter>
            <action android:name="android.settings.SETTINGS" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>

然后使用设备策略管理器setPersistentPreferredActivity

 val DEFAULT_ANDROID_SETTINGS_INTENT = IntentFilter(ACTION_SETTINGS).apply {
        addCategory(Intent.CATEGORY_DEFAULT)
    }
 val settingsComponentName = ComponentName(
        packageName,
        settingsActivity
    )
 devicePolicyManager.addPersistentPreferredActivity(
    componentName,
    DEFAULT_ANDROID_SETTINGS_INTENT,
    settingsComponentName
 )

要完成此设置,您必须禁用设备的默认“设置”应用程序(程序包可能因OEM而异),请使用

隐藏该应用程序
devicePolicyManager.setApplicationHidden(componentName,"com.android.settings",true)