当前位置: 首页 > wzjs >正文

建筑工具网站关键词调词平台费用

建筑工具网站,关键词调词平台费用,商洛网站开发,wordpress 数据库中的表一、前言 应用双开简单说就是创建一个用户然后将已经存在的APP安装到制定的userId中&#xff0c;下面新建一个系统应用来实现功能。 二、系统APP 首先要调整最大用户数量这个再framework/base/core/res/res/values/config.xml下面 <!-- Maximum number of supported use…

一、前言

应用双开简单说就是创建一个用户然后将已经存在的APP安装到制定的userId中,下面新建一个系统应用来实现功能。

二、系统APP

首先要调整最大用户数量这个再framework/base/core/res/res/values/config.xml下面

    <!--  Maximum number of supported users --><integer name="config_multiuserMaximumUsers">1</integer>

但是LineageOS已经用overlay的方式配置过了,最大是支持4个用户,所以这里不需要调整。直接下一步制作系统应用。

清单文件,权限,以及sharedUserId配置如下

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:sharedUserId="android.uid.system"><uses-permission android:name="android.permission.DELETE_PACKAGES" /><uses-permission android:name="android.permission.MANAGE_USERS"/><uses-permission android:name="android.permission.CREATE_USERS"/><uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL"/><uses-permission android:name="android.permission.INSTALL_EXISTING_PACKAGES"/><uses-permission android:name="android.permission.INSTALL_PACKAGES"/><uses-permission android:name="com.android.permission.INSTALL_EXISTING_PACKAGES" /><applicationandroid:allowBackup="true"android:dataExtractionRules="@xml/data_extraction_rules"android:fullBackupContent="@xml/backup_rules"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/Theme.MyApplication"><activityandroid:name="com.example.split.MainActivity"android:exported="true"android:label="@string/app_name"android:theme="@style/Theme.MyApplication"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>

MainActivity.kt

package com.example.splitimport android.app.ActivityManager
import android.app.ActivityThread
import android.app.IActivityManager
import android.content.pm.LauncherApps
import android.content.pm.PackageInfo
import android.content.pm.PackageInstaller
import android.content.pm.PackageManager
import android.content.pm.PackageManager.MATCH_ANY_USER
import android.content.pm.UserInfo
import android.os.Build
import android.os.Bundle
import android.os.UserHandle
import android.os.UserManager
import android.util.DisplayMetrics
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.annotation.RequiresApi
import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.material3.CircularProgressIndicator
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Switch
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.MutableState
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import com.android.internal.R.string.loading
import com.example.split.ui.theme.MyApplicationTheme
import com.example.splite.R
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launchprivate const val targetPackage = "com.example.cloudclient"private const val testUserName = "testUserName"class MainActivity : ComponentActivity() {val metrics = DisplayMetrics()var createUserId:Int=-1@RequiresApi(Build.VERSION_CODES.S)override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)windowManager.defaultDisplay.getMetrics(metrics)enableEdgeToEdge()val launcherApps=LauncherApps(this)setContent {val scope = rememberCoroutineScope()MyApplicationTheme {Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding ->Box(Modifier.fillMaxSize().padding(innerPadding)){var checked = remember {val userManager=UserManager.get(this@MainActivity)val userInfoList: List<UserInfo> = userManager.userscreateUserId=userInfoList.find {it.name== testUserName}?.id?:-1val packageManager = ActivityThread.getPackageManager();val slices=packageManager.getInstalledPackages(MATCH_ANY_USER.toLong(),createUserId?:-1)val installed=slices.list.find {if(it is PackageInfo){it.packageName==targetPackage}else{false}}!=nullmutableStateOf(installed)}var loading= remember {mutableStateOf(false)}val scope = rememberCoroutineScope()Column {Row (Modifier.fillMaxWidth().padding(20.dp), verticalAlignment = Alignment.CenterVertically){Box(Modifier.weight(1f)){Image(modifier = Modifier.size(50.dp),painter = painterResource(R.mipmap.scrrr),contentDescription = "e")}Switch(checked.value,{if(it){scope.launch (Dispatchers.Default){loading.value=truecreateUser()startBackground(createUserId)installToUserId(createUserId,checked)loading.value=false}}else{scope.launch (Dispatchers.Default){loading.value=trueuninstallToUserId(createUserId,checked)loading.value=false}}})}if(loading.value){CircularProgressIndicator(modifier = Modifier.align(alignment = Alignment.CenterHorizontally).size(60.dp))}}}}}}}@RequiresApi(Build.VERSION_CODES.S)private fun uninstallToUserId(userId: Int, checked: MutableState<Boolean>) {val packageManager = ActivityThread.getPackageManager();try {val packageInstaller =  PackageInstaller(packageManager.packageInstaller,packageName,null,userId)packageInstaller.uninstallExistingPackage(targetPackage,null);checked.value=false}catch ( e:Exception){e.printStackTrace();}}fun createUser(){val userManager=UserManager.get(this)val userInfoList: List<UserInfo> = userManager.usersvar isCreated = falsefor (userInfo in userInfoList) {if (testUserName == userInfo.name) {isCreated = truecreateUserId = userInfo.idbreak}}if (!isCreated) {val userHandle: UserHandle = userManager.createProfile(testUserName,UserManager.USER_TYPE_PROFILE_MANAGED,HashSet<String>())!!createUserId = userHandle.identifier}}fun startBackground(userId:Int){//后台启动userIdval  am: IActivityManager = ActivityManager.getService();try {am.startUserInBackground(userId);} catch ( e:Exception) {e.printStackTrace()}}@RequiresApi(Build.VERSION_CODES.Q)fun installToUserId(userId: Int, checked: MutableState<Boolean>){val packageManager = ActivityThread.getPackageManager();try {val packageInstaller =  PackageInstaller(packageManager.packageInstaller,packageName,null,userId)packageInstaller.installExistingPackage(targetPackage,PackageManager.INSTALL_REASON_USER,null);checked.value=true}catch ( e:Exception){e.printStackTrace();}}
}@Preview(showBackground = true)
@Composable
fun GreetingPreview() {MyApplicationTheme {}
}

步骤还是比较清晰,这里我只对某个已经安装的自己的App做双开:
1.进入双开应用的时候检查是否已经安装到指定用户,如果已经安装就配置UI的switch
2.switch切换的时候安装,总共三步
2.1 创建user并获取userid
2.2 启动user
2.3 将制定包名的app安装到对应的userid
3.切换回来的时候进行卸载应用
在这里插入图片描述

Lineageos的桌面支持两

❯ adb shell ps -A | grep cloud
u13_a236 9858 24619 14622780 122908 SyS_epoll_wait 0 S com.example.cloudclient
u0_a236 10199 24619 14672596 133628 SyS_epoll_wait 0 S com.example.cloudclient
http://www.dtcms.com/wzjs/376008.html

相关文章:

  • 小说网站自主建设创建自己的网页
  • 学网站开发看什么书谷歌seo博客
  • 电子商务网站建立google推广 的效果
  • 设计类网站排名市场监督管理局电话
  • 要学网页设计四川企业seo
  • 网络规划设计师视频教程百度云佛山seo培训
  • 怎么做网站地图的样式百度指数怎么看地域数据
  • 做网站的企划书谷歌商店下载官网
  • 做端口映射 怎么访问网站企业高管培训课程有哪些
  • 常用网站域名流量宝官网
  • 用jsp做的网站源代码下载网上怎么注册公司免费的
  • 运城网站制作公司百度贴吧官网首页
  • 建设b2c商城网站定在线h5免费制作网站
  • wordpress下雪郑州seo代理公司
  • 网站的建设可以起到什么作用是什么合肥关键词优化平台
  • 免费自己做网站吗鄂尔多斯seo
  • wordpress毕业设计广东公司搜索seo哪家强
  • 房产网站建设ppt企点下载
  • 网投怎么做网站seo关键词排名优化报价
  • seo优化什么意思杭州搜索引擎优化公司
  • 网站的底部导航怎么做郑州seo技术代理
  • 专业做企业网站百度怎样发布信息
  • 网站搭建软件网页在线生成
  • 南阳网站建设哪家专业珠海seo快速排名
  • 中国企业网中国商报搜外网 seo教程
  • 怎么加入网站做微商城seo白帽优化
  • 微信公众平台是什么南京 seo 价格
  • 做海外正品代购的十个网站_windows7系统优化工具
  • 做的网站在ie会乱码网址域名查询
  • 襄阳网站建设价格北京网站优化页面