gpt4 book ai didi

android - 在 Android 中从 Assets 共享图像时出现问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:00:27 24 4
gpt4 key购买 nike

有一些关于如何从 Android Assets 文件夹发送和共享图像(或文件)的文档和支持。

基本上,我得到了这些链接的支持:

  1. android share images from assets folder
  2. http://www.nowherenearithaca.com/2012/03/too-easy-using-contentprovider-to-send.html

和许多类似的。

但无论如何,我使用的代码是:

内容提供商

public class AssetsProvider extends ContentProvider {
private static final String LOGTAG = "MD/AssetsProvider";

@Override
public AssetFileDescriptor openAssetFile( Uri uri, String mode ) throws FileNotFoundException
{
Log.v(LOGTAG, "AssetsGetter: Open asset file");

AssetManager am = getContext( ).getAssets( );

String file_name = uri.getPath().substring(1, uri.getPath().length());
//String file_name = uri.getLastPathSegment();
// Neither of the two lines above work for me

if( file_name == null )
throw new FileNotFoundException( );

AssetFileDescriptor afd = null;

try
{
afd = am.openFd( file_name );
}
catch(IOException e)
{
e.printStackTrace( );
}

return afd;//super.openAssetFile(uri, mode);
}

@Override
public String getType( Uri p1 )
{
// TODO: Implement this method
return null;
}

@Override
public int delete( Uri p1, String p2, String[] p3 )
{
// TODO: Implement this method
return 0;
}

@Override
public Cursor query( Uri p1, String[] p2, String p3, String[] p4, String p5 )
{
// TODO: Implement this method
return null;
}

@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
@Override
public Cursor query( Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder, CancellationSignal cancellationSignal )
{
// TODO: Implement this method
return super.query( uri, projection, selection, selectionArgs, sortOrder, cancellationSignal );
}

@Override
public Uri insert( Uri p1, ContentValues p2 )
{
// TODO: Implement this method
return null;
}

@Override
public boolean onCreate( )
{
// TODO: Implement this method
return false;
}

@Override
public int update( Uri p1, ContentValues p2, String p3, String[] p4 )
{
// TODO: Implement this method
return 0;
}
}

我不太喜欢,因为它需要 API 16。

ANDROID list (在 <application> 标签内)

<provider
android:name="package.name.utils.AssetsProvider"
android:authorities="package.name"
android:grantUriPermissions="true"
android:exported="true" />

分享图片的代码

Uri theUri = Uri.parse("content://package.name/share_picture.png");
Intent theIntent = new Intent(Intent.ACTION_SEND);
theIntent.setType("image/*");
theIntent.putExtra(Intent.EXTRA_STREAM,theUri);
theIntent.putExtra(android.content.Intent.EXTRA_SUBJECT,"");
theIntent.putExtra(android.content.Intent.EXTRA_TEXT, "");
startActivity(theIntent);

我可以成功看到我的选择器。

我的主要问题是

我可以在某些应用程序中共享我的照片,但不能在其他应用程序中共享。例如:我可以在其中分享我的照片的应用:

  • Google 环聊

  • 推特

  • WhatsApp

  • Skype(卡在“发送中”)

  • Instagram

  • 投递箱

我无法分享照片的应用:

  • Gmail 收件箱

  • Gmail

  • 任何图像编辑应用

  • 消息

  • 松弛

  • 领英

  • 列表项

  • 聊天

  • Messenger(通过 Facebook)

  • Facebook

我无法共享的应用程序有什么问题吗?还是我在代码上做错了什么?也许是 setType功能?

提前谢谢你。

问候。

拉斐尔。


从文件共享图像时也会出现此问题,因此问题与 Assets 无关:

今天早上我做了这个测试:

    Intent shareIntent = new Intent(Intent.ACTION_SEND);
Uri phototUri = Uri.parse(folderToSaveFiles+relativeNameSharePicture);

shareIntent.setData(phototUri);
shareIntent.setType("image/png");
shareIntent.putExtra(Intent.EXTRA_STREAM, phototUri);
startActivity(Intent.createChooser(shareIntent, "Share Via"));

同样的事情发生了!!

最佳答案

最简单的答案是使用 my StreamProvider ,它会为您处理所有这些。如果这不适用于您引用的某些应用程序,请提交带有症状的问题(例如,来自这些应用程序的堆栈跟踪)。但是,我没有将 AssetFileDescriptor 用于 Assets (用于兼容设备),这是我要更改的待办事项列表。

下一个最简单的答案是将 Assets 复制到内部存储和 use FileProvider , 以及 my LegacyCompatCursorWrapper ,如 this sample app 中所示.

如果你想坚持你的代码:

第 1 步:实现一个真正的 getType() 方法,以返回 MIME 类型。

第 2 步:实现一个真正的 query() 方法,一个处理 OpenableColumns 的方法,最好使用我的 LegacyCompatCursorWrapper 或其他方式deals with poorly-written clients .

第 3 步:Add FLAG_GRANT_READ_URI_PERMISSION到您的 Intent 并将 android:exported 更改为 false

第 4 步:摆脱 EXTRA_TEXT,因为 ACTION_SEND 协议(protocol)支持任一个 EXTRA_TEXT EXTRA_STREAM,但不能同时使用。

关于android - 在 Android 中从 Assets 共享图像时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31730152/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com