Por que um atalho de sincronização funciona apenas "uma vez"? -- sync campo com tasker campo com intents camp android Relacionado O problema

Why does a SyncMe shortcut run only “once”?


1
vote

problema

português

Estou tentando executar Syncme somente quando o computador é pingável. Como o aplicativo atualmente não é capaz de funcionar dessa maneira, estou usando o Tasker e seu plugin AutoShortcut. O Syncme expõe uma intenção / atalho que permite executar todos os trabalhos de sincronização para um determinado computador. O Tasker foi então configurado para executar esse atalho sob determinadas condições e a cada dois minutos.

O problema é que o atalho só funcionará "uma vez", quaisquer chamadas subseqüentes para o atalho não executarão a sincronização. Isso não acontece apenas de dentro do Tasker, mas também ao adicionar o atalho à tela inicial. Ao tocar no ícone pela primeira vez, a UI aparece e a sincronização é executada corretamente. Mas se eu pressionar o botão home e tocar novamente, ele só retornará foco para a interface do usuário sem qualquer ação que está sendo tirada.

A única maneira que eu poderia descobrir que a corrida de atalho novamente foi de alguma forma "fechando" o aplicativo, por exemplo, indo para a tela inicial com o botão traseiro ou remover a sincronização dos aplicativos recentes, nenhum dos quais parece possível de dentro do Tasker, Eu acho que requer enraizamento.

english

I'm trying to run SyncMe only when computer is pingable. Since the app currently is not able to work this way, I'm using Tasker and its AutoShortcut plugin. SyncMe exposes an intent/shortcut which allows to run all sync jobs for a given computer. Tasker was then configured to run such shortcut under certain conditions and every two minutes.

The problem is that the shortcut will only run "once", any subsequent calls to the shortcut will not run the sync. This happens not only from within Tasker but also when adding the shortcut to home screen. When tapping the icon for the first time, UI shows up and the sync runs correctly. But if I press home button and tap it again, it will only return focus to the UI without any action being taken.

The only way I could figure out to make the shortcut run again was somehow "closing" the app, for example going to home screen with the back button or removing SyncMe from recent apps, none of which seems possible from within Tasker, I think it requires rooting.

        

Lista de respostas

0
 
vote

Android fornece atividades uma configuração chamada launchMode , que permite controlar como e quando são lançados. Com alguns valores de launchMode , iniciar a mesma atividade novamente com uma intenção não iniciar uma nova atividade: Em vez disso, ele entregará a nova intenção para a atividade existente. Isso pode acontecer somente se a atividade for a atividade de primeiro plano, ou se estiver em qualquer lugar na tarefa atual (ou seja, se você puder chegar a essa atividade apenas pressionando Back repetidamente).

É bastante comum para os autores de aplicativos definir launchMode para resolver alguns tipos de programação ou problema de interface de usuário, como problemas de concorrência que surgem de ter duas instâncias da mesma atividade em execução de uma vez, um em o primeiro plano e um em segundo plano. Quando eles fazem isso, eles nem sempre se lembram de escrever o código para lidar com a nova intenção que a atividade é enviada pelo Android: A atividade recebe a intenção de uma maneira diferente de quando é lançado pela primeira vez.

É difícil dizer sem saber mais sobre este aplicativo, mas a partir do comportamento que você descreve, parece que Syncme caiu nessa armadilha. Você deve dizer ao desenvolvedor o que você está tentando alcançar e pedir para corrigi-lo.

 

Android gives activities a setting called launchMode, which allows them to control how and when they're launched. With some values of launchMode, starting the same activity again with an intent won't start a new activity: instead, it'll deliver the new intent to the existing activity. This might happen only if the activity is the foreground activity, or if it is anywhere in the current task (that is, if you can get to that activity just by pressing back repeatedly).

It's quite common for app authors to set launchMode to solve some kinds of programming or user interface problem, such as concurrency issues that arise from having two instances of the same activity running at once, one in the foreground and one in the background. When they do this, they don't always remember to write the code to handle the new intent the activity is sent by Android: the activity receives the intent a different way to when it's first launched.

It's hard to tell without knowing more about this app, but from the behaviour you describe, it sounds like SyncMe has fallen into this trap. You should tell the developer what you're trying to achieve, and ask them to fix it.

 
 
   
   
0
 
vote
vote
Melhor resposta
 

atalho da tela inicial

Acreditamos que é um erro android. De fato, como eu poderia confirmar em uma compilação personalizada, adicionando FLAG_ACTIVITY_SINGLE_TOP Corrigido o problema para atalhos da tela inicial, apesar de sua documentação indicando bonito o oposto , como abaixo. Encontramos esses documentos muito mal escritos, pelo menos. De acordo com o desenvolvedor, esta correção vai funcionar, desde que a atividade do aplicativo principal permaneça no topo (isto é, editar uma tarefa de sincronização, então pressionar o botão Home para tocar o ícone novamente não vai funcionar).

.

se definido, a atividade não será lançada se já estiver em execução na parte superior da pilha de histórico.

Tasker e AutoShortcut

Por algum motivo, a correção acima não funciona no AutoShortcut. Não sei o quão diferente a intenção enviada por este plugin é a partir dos atalhos da tela inicial. De qualquer forma, relatei o problema para o desenvolvedor. Independentemente disso, eu também configurei uma configuração direta de intenção no Tasker, em vez de usar o AutoShortcut, da seguinte forma:

  • ação: com.bv.wifisync.run
  • Extra: itemId:<id>
  • pacote: com.bv.wifisync
  • classe: com.bv.wifisync.Hosts
  • alvo: Activity
 

Home screen shortcut

We believe it's an Android bug. In fact, as I could confirm on a custom build, adding FLAG_ACTIVITY_SINGLE_TOP fixed the problem for home screen shortcuts, despite its documentation indicating pretty the opposite, as below. We find those docs very poorly written, at least. According to the developer, this fix is going to work as long as main app activity stays on top (that is, editing a sync job then pressing home button for tapping icon again is not going to work).

If set, the activity will not be launched if it is already running at the top of the history stack.

Tasker and AutoShortcut

For some reason, the above fix does not work in AutoShortcut. I don't know how different the intent sent by this plugin is from that of the home screen shortcuts. Either way, I have reported the problem to the developer. Regardless, I also just have set up a direct intent configuration in Tasker, instead of using AutoShortcut, as follows:

  • Action: com.bv.wifisync.run
  • Extra: itemId:<id>
  • Package: com.bv.wifisync
  • Class: com.bv.wifisync.Hosts
  • Target: Activity
 
 

Perguntas relacionadas

0  Problema com intenções: Macrodroid  ( Problem with intents macrodroid ) 
Eu não sou capaz de obter a intenção de funcionar para este fora alto aplicativo . Descrição do aplicativo diz . Inicie essas atividades para alterar o ...

5  Pare a reprodução de mídia através do ADB  ( Stop media playback through adb ) 
Estou testando algumas configurações em um telefone e, infelizmente, o único controle que tenho é através do ADB agora. Meu problema é que, embora eu possa in...

24  Existe uma maneira de desligar permanentemente os mapas do Google até que seja necessário?  ( Is there a way to permanently turn off google maps until needed ) 
O Google Maps parece ter uma quantidade insana de intenções registradas para ele, além de outras formas de serem iniciadas. Como este é um aplicativo muito ...

1  Tela de intenção de compartilhamento aleatório  ( Random share intent screen ) 
Às vezes, quando eu estou apenas clicando em Aplicativos ou pitando pelo sistema operacional, recebo compartilhamento aleatório ABCDEFGHIJKLMNABCDEFGHIJKLMN0...

1  Atalho de Simplenote para abrir uma nova nota  ( Simplenote shortcut to open a new note ) 
Eu gostaria de um atalho da tela inicial que abre uma nova nota em Simplenote . Eu sei que posso facilmente configurar um atalho que abre até a lista de nota...

0  Ligue para alguém automaticamente depois de receber uma notificação de aplicativo  ( Call someone automatically after receiving an app notification ) 
Eu sou bastante novo para o Android, eu só quero saber se é possível implementar um recurso em um aplicativo que quando você receberia uma notificação de push...

0  Ajuda com intenções: Macrodroid  ( Help with intents macrodroid ) 
Além disso Problema com intenção: macrodroid , a solução na resposta aceita funciona, mas tristemente apenas para o primeira vez (erro de aplicativo). Eu ten...

0  Lista de intenções e aplicativos registrados para essas intenções?  ( List of intents and registered apps for those intents ) 
É possível visualizar uma lista de intenções e qual aplicativo é definido como lançamento quando tal intenção é emitida por um aplicativo? Seria bom se o sist...

0  Como acionar tarefas quando o botão Play / Pause é pressionado no widget ou notificação do viciado em podcast?  ( How to trigger task when play pause button is pressed on podcast addict widget o ) 
Eu gostaria de acionar uma tarefa quando o botão Play / Pause é pressionado no widget viciado do podcast ou notificação na tela de bloqueio. Eu tentei usar ...

6  Descobrir os intentos que um aplicativo usa internamente  ( Finding out the intents an app uses internally ) 
Eu tenho um aplicativo ( ferramentas inteligentes ) que consiste em subapps distintas de mutiple. Eu gostaria de ter um atalho para um único subpp, então eu n...




© 2022 pergunte.org All Rights Reserved. Casa de perguntas e respostas todos os direitos reservados


Licensed under cc by-sa 3.0 with attribution required.