【问题标题】:kivy android share imagekivy android 分享图片
【发布时间】:2016-12-23 08:16:58
【问题描述】:

我想创建将使用 android ACTION_SEND 意图共享图像的共享按钮。这是我的代码:

from kivy.setupconfig import USE_SDL2


def share(path):
    if platform == 'android':
        from jnius import cast
        from jnius import autoclass
        if USE_SDL2:
            PythonActivity = autoclass('org.kivy.android.PythonActivity')
        else:
            PythonActivity = autoclass('org.renpy.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('"image/*"')
        imageFile = File(path)
        uri = Uri.fromFile(imageFile)
        shareIntent.putExtra(Intent.EXTRA_STREAM, uri)

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

但它不起作用)它在这一行shareIntent.putExtra(Intent.EXTRA_STREAM, uri) 中抛出此错误jnius.jnius.JavaException: Invalid instance of u'android/net/Uri' passed for a u'java/lang/String'。我该如何解决这个问题?

【问题讨论】:

    标签: android python kivy pyjnius


    【解决方案1】:

    我找到了解决方案。您必须将 uri 转换为 parcelable,然后将其传递给意图:

    parcelable = cast('android.os.Parcelable', uri)
    shareIntent.putExtra(Intent.EXTRA_STREAM, parcelable)
    

    【讨论】:

      【解决方案2】:

      此方法适用于 API 24 和最新版本:

      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)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-27
        • 2021-12-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-17
        • 2014-09-18
        • 1970-01-01
        相关资源
        最近更新 更多