[Python] Botao de compartilhamento no kivy

Discussão em 'Python' iniciado por Stack, Abril 9, 2025.

  1. Stack

    Stack Membro Participativo

    Estou construindo meu primeiro app android usando kivy, pyjnius e buildozer, mas estou com problema para implementar um botão de compartilhamento. Segui esse link kivy android share que contém o código abaixo, mas quando a função é chamada ele abre o compartilhamento do android seleciona o whatsapp pra enviar o arquivo pdf, mas na hora de carregar o pdf na tela simplesmente pisca e volta pra tela do whatsapp, não envia nada. Estou supondo que isso ocorra por causa das permissões dos androids mais recentes.

    def share(self):
    if platform == 'android':
    from android.storage import primary_external_storage_path
    from jnius import autoclass
    from jnius import cast
    import os

    StrictMode = autoclass('android.os.StrictMode')
    StrictMode.disableDeathOnFileUriExposure()

    PythonActivity = autoclass('org.kivy.android.PythonActivity')

    Intent = autoclass('android.content.Intent')
    String = autoclass('java.lang.String')
    Uri = autoclass('android.net.Uri')
    File = autoclass('java.io.File')

    shareIntent = Intent(Intent.ACTION_SEND)
    shareIntent.setType('"application/pdf"')

    path = os.path.join(primary_external_storage_path(),"test.pdf")

    imageFile = File(path)
    uri = Uri.fromFile(imageFile)
    parcelable = cast('android.os.Parcelable', uri)
    shareIntent.putExtra(Intent.EXTRA_STREAM, parcelable)

    currentActivity = cast('android.app.Activity', PythonActivity.mActivity)
    currentActivity.startActivity(shareIntent)


    Pesquisando descobri que talvez deve-se usar um FileProvider ao invés de Uri.fromFile(imageFile) por causa das permissões, mas não descobri como implementar esse FileProvider. Se alguém puder dar alguma ideia de como contornar isso de qualquer forma que for agradeço muito.

    PS.: Já tentei usar o KVdroid tambem. Mas a function share_file dele gerar o mesmo problema por que usar Uri.fromFile() para gerar o uri pra outras aplicações, a função e bem semelhante a esse código acima.

    Continue reading...

Compartilhe esta Página