[FAQ15097] O botão Home falha após a atualização do OTA

[DESCRIÇÃO]

 Após o sistema de atualização OTA, o botão Início tem feedback, mas não há função correspondente.

 

 

 

[SOLUÇÃO]

 Verifique se o aplicativo Provision.apk é atualizado normalmente e confirme se DEVICE_PROVISIONED no banco de dados de configurações foi escrito como 1.

 

O papel do Provision é muito simples: é um carregador de inicialização de inicialização do sistema. No Android nativo, o Provision faz apenas uma coisa: escrever uma tag DEVICE_PROVISIONED. No entanto, essa marca é muito útil e só será escrita uma vez quando o sistema for completamente atualizado (limpeza dupla), o que significa que o sistema Android está pronto para a atualização e pode funcionar normalmente. O sistema pode causar um problema sem formatar a partição / data / (sem operação de limpeza dupla) e o botão Início da máquina não responde.

 

1. Programa de provisão

  Primeiro, o Provision está nos pacotes / aplicativos de origem do sistema.Vamos dar uma olhada na configuração do Provision:

    <aplicativo> 
<atividade android: name = "DefaultActivity" android: excludeFromRecents = "true">             
<filtro de intenção android: priority = "1">                 
<ação android: name = "android.intent.action.MAIN" />                 
< categoria android: name = "android.intent.category.HOME" /> 
<categoria android: name = "android.intent.category.DEFAULT" /> 
</intent-filter>         
</activity>     
</application>

  Você pode ver dois lugares no código acima,

Primeiro: o fornecimento é configurado com a propriedade category.HOME.

  Segundo: prioridade = 1, a prioridade está configurada, ou seja, sua prioridade é superior à nossa prioridade nativa do Iniciador, será executada antes do iniciador.

classe pública DefaultActivity estende Activity {     
@Override     
void onCreate protegido (pacote icicle) {         
super.onCreate (icicle);        
// Adicione uma configuração persistente para permitir que outros aplicativos saibam que o dispositivo foi provisionado. Settings.Secure.putInt (getContentResolver (), Settings.Secure.DEVICE_PROVISIONED, 1);        
// remova esta atividade do gerenciador de pacotes.        
PackageManager pm = getPackageManager ();        
Nome do componente = novo nome do componente (this, DefaultActivity.class);        
pm.setComponentEnabledSetting (nome, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);        
// encerra a atividade.        
terminar();    
} 
}

 

 

O código acima é o código fonte completo da provisão, que possui apenas uma atividade e faz principalmente duas coisas:

  • Definir sinalizador DEVICE_PROVISIONED
  • Proibir o componente de Atividade da própria Provisão

Todo o programa Provision faz apenas essas duas coisas: DEVICE_PROVISIONED é o sinalizador de atualização do sistema mencionado acima.

 

2. Proibir componentes

  A mencionada acima uma das funções do Provision, escreve uma marca. Além de escrever tags, há uma função que proíbe seu próprio componente Activity. Primeiro, introduza brevemente a API dos componentes proibidos.

void setComponentEnabledSetting (ComponentName componentName, int newState, int flags)
  • componentName: nome do componente 
  • newState: o novo estado do componente.Três valores podem ser definidos, da seguinte maneira: 
  •   Estado indisponível: COMPONENT_ENABLED_STATE_DISABLED 
  •   Estado disponível: COMPONENT_ENABLED_STATE_ENABLED 
  •   Estado padrão: COMPONENT_ENABLED_STATE_DEFAULT 
  • sinalizadores: Rótulo de comportamento, o valor pode ser DONT_KILL_APP ou 0. 0 significa matar o aplicativo que contém o componente

Após desativar a função do componente, as informações do pacote do sistema serão registradas e as informações do pacote do sistema são armazenadas em /data/system/packages.xml

 

<nome do pacote = "com.android.provision" codePath = "/ system / app / Provision.apk" nativeLibraryPath = "/ data / data / com.android.provision / lib" flags = "1" ft = "11b7e237e00" = "11b7e237e00" ut = "11b7e237e00" version = "15" userId = "10005"> <contagem de sigs = "1"> <índice do certificado = "1" /> </sigs> <componentes desativados> <nome do item = "com.android.provision.DefaultActivity" /> </disabled-components> </package>

   O item acima é para registrar as informações de componentes proibidos na embalagem. Obviamente, package.xml também contém todas as informações do pacote de aplicativos, você pode dar uma olhada nisso.

  Esse componente será executado apenas uma vez; portanto, se não formatarmos o diretório / data, esse componente será banido. Portanto, causará um problema que nossa tag DEVICE_PROVISIONED não será gravada novamente.

  Se você encontrar o botão Início da máquina não funcionar, poderá verificar se a marca DEVICE_PROVISIONED está normal.

Publicado 31 artigos originais · Curtidas6 · Visitantes 10.000+

Acho que você gosta

Origin blog.csdn.net/u012824529/article/details/102967349
Recomendado
Clasificación