Я пытался и пытался заставить это работать. Я прошел множество примеров без везения. Проблема в том, что изображение не подключено, когда я пытаюсь его использовать, например, используя почтовый клиент. Мне удалось заставить это работать при использовании внешнего хранилища, но внутреннее хранилище лучше подходит для моих нужд.Обмен изображения из внутреннего хранилища
Я нажимаю кнопку, а затем изображение сохраняется во внутреннем хранилище и сразу после этого является общим, но изображения нет.
Это из Activity
класса:
int width = size.x;
int height = size.y;
Bitmap shareBmp = Bitmap.createBitmap(screenBmp, 0, 0, width, height);
ContextWrapper wrapper = new ContextWrapper(getApplicationContext());
File directory = wrapper.getDir("images", Context.MODE_PRIVATE);
File filePath = new File(directory, "share.png");
FileOutputStream fos;
try
{
fos = new FileOutputStream(filePath);
shareBmp.compress(Bitmap.CompressFormat.PNG, 90, fos);
fos.close();
}
catch (Exception aE){}
Uri uri = Uri.parse("content://com.example.Test/share.png");
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_STREAM, uri);
intent.setType("image/png");
startActivity(Intent.createChooser(intent, "Share Image"));
Вот ImageProvider
класс:
public class ImageProvider extends ContentProvider
{
@Override
public ParcelFileDescriptor openFile(Uri aUri, String aMode) throwsFileNotFoundException
{
File file = new File(getContext().getFilesDir(), aUri.getPath());
if (file.exists())
{
return (ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY));
}
throw new FileNotFoundException(aUri.getPath());
}
@Override
public boolean onCreate()
{
return false;
}
@Override
public int delete(Uri aUri, String aSelection, String[] aSelectionArgs)
{
return 0;
}
@Override
public String getType(Uri aUri)
{
return null;
}
@Override
public Uri insert(Uri aUri, ContentValues aValues)
{
return null;
}
@Override
public Cursor query(Uri aUri, String[] aProjection, String aSelection, String[] aSelectionArgs, String aSortOrder)
{
return null;
}
@Override
public int update(Uri aUri, ContentValues aValues, String aSelection, String[] aSelectionArgs)
{
return 0;
}
}
Это из манифеста:
<provider
android:name=".ImageProvider"
android:authorities="com.example.Test"
android:exported="true"/>
см. Мой ответ здесь: http://stackoverflow.com/questions/15377373/how-to-put-a-video-file-in-android-custom-content-provider – dangalg