android share images from assets folder
Complementing what @intrepidis answered:
You will need override methods like example class above:
package com.android.example;
import android.content.ContentProvider;
import android.net.Uri;
import android.content.res.AssetFileDescriptor;
import android.content.res.AssetManager;
import java.io.FileNotFoundException;
import android.content.ContentValues;
import android.database.Cursor;
import java.io.IOException;
import android.os.CancellationSignal;
public class AssetsProvider extends ContentProvider
{
@Override
public AssetFileDescriptor openAssetFile( Uri uri, String mode ) throws FileNotFoundException
{
Log.v( TAG, "AssetsGetter: Open asset file" );
AssetManager am = getContext( ).getAssets( );
String file_name = uri.getLastPathSegment( );
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;
}
@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;
}
}
I needed to override two times the query method.
And add these lines above tag in your androidmanifest.xml:
<provider
android:name="com.android.example.AssetsProvider"
android:authorities="com.android.example"
android:grantUriPermissions="true"
android:exported="true" />
And with this, all work like a charm :D
Problems sharing an image from assets in Android
The main problem is that the Uri
has to be parsed from a File
with Uri.fromFile(File file)
then everything works ok!
Adding images from assets folder in adapter
It must be setImageBitmap(bitmap)
not setImageResource(bitmap)
How to use image in android:src= from assets folder instead of drawable
No it is not possible directly in XML although you can do it pragmatically.
AssetManager assetManager = getAssets();
ImageView imageView = (ImageView) findViewById(R.id.iv_image);
try {
InputStream ims = assetManager.open("my_image.jpg");
Drawable d = Drawable.createFromStream(ims, null);
imageView.setImageDrawable(d);
} catch (IOException ex) {
return;
}
How to set images from assets folder to list view?(using SimpleAdapter)
Simple Adapter can work only with IDs in drawable-folder or with Uri. But you can use ViewBinder to set image using setImageBitmap method.
Related Topics
Hiding the Actionbar on Recyclerview/Listview Onscroll
Adding Items to Endless Scroll Recyclerview with Progressbar at Bottom
Android Oncreate or Onstartcommand for Starting Service
Livedata Update on Object Field Change
Android: Automatically Choose Debug/Release Maps API Key
Getapplicationcontext(), Getbasecontext(), Getapplication(), Getparent()
A Failure Occurred While Executing Com.Android.Build.Gradle.Internal.Tasks
Edittext Maxlines Not Working - User Can Still Input More Lines Than Set
Android - Hold Button to Repeat Action
Android: Generate Random Color on Click
Android Open External Storage Directory(Sdcard) for Storing File
Is There Any Way in Android to Force Open a Link to Open in Chrome
Change Edittext Hint Color When Using Textinputlayout
Android Alarmmanager - Rtc_Wakeup VS Elapsed_Realtime_Wakeup