我最初的问题在这里:Android-如何按用户名来编程用户?而且它仍然没有得到答复,但是我取得了一些进步,现在我完全陷入了困境。
现在我遵循以下步骤:
-
添加了代码样本中所示的
DeviceAdmin
类,我不知道它是否好还是我应该在那里实现某些东西:import android.app.admin.DeviceAdminReceiver; import android.content.Context; import android.content.Intent; import android.widget.Toast; public class DeviceAdmin extends DeviceAdminReceiver { void showToast(Context context, String msg) { Toast.makeText(context, msg, Toast.LENGTH_SHORT).show(); } @Override public void onEnabled(Context context, Intent intent) { showToast(context, "admin_receiver_status_enabled"); } @Override public CharSequence onDisableRequested(Context context, Intent intent) { return ""; //context.getString(R.string.admin_receiver_status_disable_warning); } @Override public void onDisabled(Context context, Intent intent) { showToast(context, "admin_receiver_status_disabled"); } @Override public void onPasswordChanged(Context context, Intent intent) { showToast(context, "admin_receiver_status_pw_changed"); } }
-
在清单中添加了
DeviceAdmin
:<receiver android:name=".DeviceAdmin" android:label="@string/device_admin" android:description="@string/device_admin_description" android:permission="android.permission.BIND_DEVICE_ADMIN"> <meta-data android:name="android.app.device_admin" android:resource="@xml/security_policies" /> <intent-filter> <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" /> </intent-filter> </receiver>
-
在我的
MainActivity
类中,我添加了此代码以获得管理权限:DevicePolicyManager mDPM; ComponentName mDeviceAdmin; final int REQUEST_CODE_ENABLE_ADMIN = 1; mDPM = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE); mDeviceAdmin = new ComponentName(this, DeviceAdmin.class); if (!mDPM.isAdminActive(mDeviceAdmin)) { // try to become active – must happen here in this activity, to get result Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mDeviceAdmin); intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, mContext.getString(R.string.device_admin_description)); startActivityForResult(intent, REQUEST_CODE_ENABLE_ADMIN); } else { UserManager um = (UserManager) mContext.getSystemService(Context.USER_SERVICE); // always return 1 List<UserHandle> h = um.getUserProfiles(); // crashes !!! saying I need MANAGE_USERS persmission mDPM.switchUser(mDeviceAdmin, h.get(0)); }
我可以在设置菜单中看到我的应用程序作为设备管理员。
-
所以我去了清单并添加了这两个权限:
<permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" android:permissionGroup="android.permission-group.SYSTEM_TOOLS" android:protectionLevel="signature" android:label="@string/manage_users_permission" android:description="@string/manage_users_permission_description" /> <permission android:name="android.permission.MANAGE_USERS" android:permissionGroup="android.permission-group.SYSTEM_TOOLS" android:protectionLevel="signature" android:label="@string/manage_users_permission" android:description="@string/manage_users_permission_description" />
-
这也不起作用,所以我发现我需要签署我的应用程序,我都不知道如何开始这样做。我发现帖子说我需要这两个文件:platform.x5099.pem,platform.pk8,所以我去了我们从我们已安装的ROM工作的源代码团队中获取它们。我要求一个Linux Guy运行
keytool-importkeypair
,如下所示:具有系统特权的APK,这给了我一个文件:debug.keystore,我将其放在应用程序的应用程序夹中。 -
然后,我已经将其添加到项目中的
build.gradle
文件中:signingConfigs { release { storeFile file("debug.keystore") storePassword "test123" keyAlias "platform" keyPassword "test123" } }
-
这些都没有解决我的问题,但我仍然无法获得
MANAGE_USERS
的许可,但我仍然无法切换用户,然后我看到一篇文章说:android:sharedUserId="android.uid.system"
添加到<manifest>
tag,这给我带来了这个错误INSTALL_FAILD_SHARED_USER_INCOMPATIBLE
我是Android的新手,这对我来说是非常先进的理解,但是我必须在工作中这样做,而且这里没有其他Android开发人员...
当您的应用与平台键签名时,您只能使用android.uid.system"。