Fiquei me perguntando como aplicativos Android e Android implementa o botão de compartilhamento e o mecanismo de compartilhamento. Por exemplo, quando eu clico no botão de compartilhamento no YouTube, aparece uma lista dos aplicativos a serem compartilhados. Como esta lista é determinada? Existe uma intenção específica de "compartilhamento" e todos os pontos capazes de compartilhar o tipo de intenção fornecido nos extras de intenção são exibidos? Qual é o nome técnico do padrão de design usado para implementar isso? Obrigado.
share-menu
intents
Jack Maddington
fonte
fonte
Respostas:
Existem duas partes: o mecanismo para os aplicativos de comunicação dizerem que podem compartilhar coisas e o mecanismo para os aplicativos com conteúdo para compartilhar. Vou lidar com eles um de cada vez, mas primeiro uma rápida observação sobre as intenções .
Intenções
A intenção no Android é o que é usado para iniciar um aplicativo. Pode funcionar como um atalho ou como uma associação de arquivos do Windows. A intenção pode especificar o nome do aplicativo a ser iniciado, mas não precisa. Também pode especificar a ação a ser executada (por exemplo, "abra sua atividade principal", "visualize este URL", "crie uma entrada na agenda") e o tipo MIME do objeto em que ele atuará (por exemplo, a coisa que você deseja visualizar tem o tipo image / jpeg). Alguns nomes de ações são específicos para um aplicativo específico, mas muitos são padronizados pelo Android para permitir que os aplicativos interajam.
Filtros de intenção e aplicativo de comunicação
Cada aplicativo especifica filtros de intenção para dizer que tipo de ações ele pode executar. por exemplo, um aplicativo visualizador de imagens registraria um filtro de intenção para "visualizar este URL" onde o tipo MIME é "image / *"; um navegador da web registraria um filtro de intenção para "visualizar este URL", onde o esquema de URL é "http" ou "https". Para poder compartilhar coisas, um aplicativo registra um filtro de intenção para a intenção "enviar", com um tipo específico (por exemplo, se ele pode compartilhar fotos apenas) ou para qualquer tipo.
Aplicativo de conteúdo
O aplicativo que deseja compartilhar algum conteúdo cria uma intenção com a ação "compartilhar" e um URL apontando para o conteúdo a ser compartilhado. (Geralmente, é um URL "temporário" que fornece ao aplicativo receptor acesso temporário ao arquivo no armazenamento privado do aplicativo de conteúdo ou a um fluxo gerado pelo aplicativo de conteúdo.) Ele não especifica o nome de um aplicativo para lidar com o intenção. Em seguida, fornece essa intenção à estrutura do Android e solicita que o Android exiba a caixa de diálogo do seletor . O Android compara a intenção com os filtros de intenção de todos os aplicativos instalados, cria a lista e a mostra ao usuário. Quando o usuário escolhe um aplicativo específico, o Android inicia o aplicativo e passa a intenção. O aplicativo usa o URL para obter o conteúdo do aplicativo original.
Novo no Marshmallow: compartilhamento direto
No Marshmallow, há outro mecanismo chamado Direct Share . Isso complementa o mecanismo de intenção para que você possa escolher pessoas ou grupos para compartilhar diretamente na caixa de diálogo do seletor, ignorando a etapa extra de "para quem você gostaria de enviá-lo". Isso funciona um pouco diferente: o aplicativo de comunicação deve fornecer um serviço. Quando o aplicativo com o conteúdo solicita um seletor, o Android inicia o serviço para cada aplicativo relevante. O serviço retorna uma lista de destinos de compartilhamento relevantes , e o Android reúne todas essas listas separadas na lista exibida na caixa de diálogo.
fonte
Não sou desenvolvedor, por isso só posso dar uma explicação bruta: os aplicativos declaram em
Manifest
quais Mimetipos eles entendem e estão dispostos a responder em ações compartilhadas. Para isso, eles definem os chamados "filtros de intenção", por exemplo:Portanto, sempre que você pressiona o botão "compartilhar", o conteúdo a ser compartilhado é avaliado e comparado com os aplicativos que declararam estar dispostos a receber o formato.
Fontes:
fonte