Android 与其他应用共享uri

Android 与其他应用共享uri,android,uri,android-contentprovider,Android,Uri,Android Contentprovider,如何将我的应用程序中的Uri与其他应用程序共享?它可能指向dropbox文件、google驱动器文件、本地文件或本地文档文件 我的应用程序有权读取Uri,现在我想与另一个应用程序共享,并将权限交给他人。我该怎么做 我真的需要自己编写内容提供商吗 我真的需要自己编写内容提供商吗 您无法强制第三方提供商(如Dropbos、Google Drive)授予对单独第三方应用程序的访问权限。这就好比我能够允许其他人访问你的银行账户,仅仅因为你允许我访问你的银行账户 整体共享机制是为您管理的内容或简单内容(如

如何将我的应用程序中的
Uri
与其他应用程序共享?它可能指向dropbox文件、google驱动器文件、本地
文件
或本地
文档文件

我的应用程序有权读取
Uri
,现在我想与另一个应用程序共享,并将权限交给他人。我该怎么做

我真的需要自己编写内容提供商吗

我真的需要自己编写内容提供商吗

您无法强制第三方提供商(如Dropbos、Google Drive)授予对单独第三方应用程序的访问权限。这就好比我能够允许其他人访问你的银行账户,仅仅因为你允许我访问你的银行账户

整体共享机制是为您管理的内容或简单内容(如纯文本)而设计的

你的选择是:

  • 不要分享你无法管理的东西

  • 制作内容的本地副本(在文件中)并共享,例如通过
    ContentProvider

  • 尝试创建代理
    ContentProvider
    ,该代理读取内容并通过管道直接提供,而不是从包含内容副本的本地文件提供。对于
    ACTION\u SEND
    ,这可能会起作用,但请记住,管道备份流是不可查找的,因此某些类型的应用程序(如媒体播放器)不喜欢管道备份流

  • 我真的需要自己编写内容提供商吗

    您无法强制第三方提供商(如Dropbos、Google Drive)授予对单独第三方应用程序的访问权限。这就好比我能够允许其他人访问你的银行账户,仅仅因为你允许我访问你的银行账户

    整体共享机制是为您管理的内容或简单内容(如纯文本)而设计的

    你的选择是:

  • 不要分享你无法管理的东西

  • 制作内容的本地副本(在文件中)并共享,例如通过
    ContentProvider

  • 尝试创建代理
    ContentProvider
    ,该代理读取内容并通过管道直接提供,而不是从包含内容副本的本地文件提供。对于
    ACTION\u SEND
    ,这可能会起作用,但请记住,管道备份流是不可查找的,因此某些类型的应用程序(如媒体播放器)不喜欢管道备份流


  • 我编写了一个gallery应用程序,我希望用户能够通过
    android.intent.action.PICK
    android.intent.action.GET_CONTENT
    在我的应用程序中选择任何图像或视频。这也适用于视频播放器,因此您建议制作数据的本地副本,并通过内容提供商访问本地数据?即使数据可能已经在sd卡的某个地方存在?@prom85:我建议您将应用程序限制在外部存储,或者将这些功能限制在外部存储。我不认为用户体验对您尝试处理其他来源的内容有很大帮助。如果我将此限制为仅外部存储,您建议如何共享uri?直接提交uri似乎不起作用…@prom85:我会尝试使用
    FileProvider
    通过
    content
    uri
    提供文件,在
    setResult()使用的
    Intent
    上添加
    FLAG\u GRANT\u READ\u uri\u PERMISSION
    (或者
    FLAG\u GRANT\u WRITE\u uri\u PERMISSION
    。我还没有尝试过实现
    ACTION\u PICK
    ACTION\u GET\u CONTENT
    活动,所以这种方法可能是错误的,但这正是我要开始的地方。所以我必须使用自己的提供者,因为我不能直接重用媒体存储uri,因为我不能提供读取uri的权限?我会尝试…我写了一个画廊应用程序,我希望用户能够通过
    android.intent.action.PICK
    android.intent.action.GET_CONTENT
    在我的应用程序中选择任何图像或视频。这也适用于视频播放器,因此您建议制作数据的本地副本,并通过内容提供商访问本地数据?即使数据可能已经在sd卡的某个地方存在?@prom85:我建议您将应用程序限制在外部存储,或者将这些功能限制在外部存储。我不认为用户体验对您尝试处理其他来源的内容有很大帮助。如果我将此限制为仅外部存储,您建议如何共享uri?直接提交uri似乎不起作用…@prom85:我会尝试使用
    FileProvider
    通过
    content
    uri
    提供文件,在
    setResult()使用的
    Intent
    上添加
    FLAG\u GRANT\u READ\u uri\u PERMISSION
    (或者
    FLAG\u GRANT\u WRITE\u uri\u PERMISSION
    。我还没有尝试过实现
    ACTION\u PICK
    ACTION\u GET\u CONTENT
    活动,所以这种方法可能是错误的,但这正是我要开始的地方。所以我必须使用自己的提供者,因为我不能直接重用媒体存储uri,因为我不能提供读取uri的权限?我会试试。。。