Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to store downloaded image in internal storage using Download Manager in android

Tags:

android

how to save image or mp3 file in internal storage using Download manager

Code:

   public void StartDownload(String path)
   {
   ContextWrapper cw = new ContextWrapper(context);
        File directory = cw.getDir("channel" + cId, Context.MODE_PRIVATE);
        if (!directory.exists()) {
            directory.mkdir();
        }
        DownloadManager mgr = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);

        Uri downloadUri = Uri.parse(path);
        DownloadManager.Request request = new DownloadManager.Request(
                downloadUri);
        String imgnm = path.substring(path.lastIndexOf("/") + 1);
        startdownloadurl = directory.getAbsolutePath()+"/";
        System.out.println(" directory " + startdownloadurl);
        request.setAllowedNetworkTypes(
                DownloadManager.Request.NETWORK_WIFI | DownloadManager.Request.NETWORK_MOBILE)
                .setAllowedOverRoaming(false).setTitle(imgnm)
                .setDescription("Downloading...")
                .setVisibleInDownloadsUi(true)
                .setDestinationInExternalPublicDir(startdownloadurl, imgnm);


        mgr.enqueue(request);
    }

i m trying to store downloaded image or mp3 file in my internal storage but it not work well required path is "data/data/packagename/app_channel1/image1.jpg"

like image 375
Chetna Avatar asked Jul 25 '16 08:07

Chetna


People also ask

Where does download Manager save files Android?

You can find downloads on Android in My Files or File Manager. You can find these apps in the app drawer of your Android device. Within My Files or File Manager, navigate to the Downloads folder to find everything you downloaded.

What is internal download storage?

These files are stored in internal storage, which other apps or users cannot access. Android system files are also stored in internal storage, which are not accessible to the user. You will either download an app or can root your smartphone to access these files.


1 Answers

Only your own app can Access to app internal storage Default android builtin download manager cant access to your app internal storage so you cant download in internal storage.

Solution:

Download file in sd card temp file and when download complete register a receive and then copy file from external to internal storage.

Complete code:

public class MainActivity extends Activity {
    private long enqueue;
    private DownloadManager dm;

    /**
     * Called when the activity is first created.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        BroadcastReceiver receiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                String action = intent.getAction();
                if (DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(action)) {
                    long downloadId = intent.getLongExtra(
                            DownloadManager.EXTRA_DOWNLOAD_ID, 0);
                    DownloadManager.Query query = new DownloadManager.Query();
                    query.setFilterById(enqueue);
                    Cursor c = dm.query(query);
                    if (c.moveToFirst()) {
                        int columnIndex = c
                                .getColumnIndex(DownloadManager.COLUMN_STATUS);
                        if (DownloadManager.STATUS_SUCCESSFUL == c
                                .getInt(columnIndex)) {

                            ImageView view = (ImageView) findViewById(R.id.imageView1);
                            String uriString = c
                                    .getString(c
                                            .getColumnIndex(DownloadManager.COLUMN_LOCAL_URI));

                            Uri a = Uri.parse(uriString);
                            File d = new File(a.getPath());
                           // copy file from external to internal will esaily avalible on net use google.
                            view.setImageURI(a);
                        }
                    }
                }
            }
        };

        registerReceiver(receiver, new IntentFilter(
                DownloadManager.ACTION_DOWNLOAD_COMPLETE));
    }

    public void onClick(View view) {
        dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
        DownloadManager.Request request = new DownloadManager.Request(
                Uri.parse("http://www.vogella.de/img/lars/LarsVogelArticle7.png")).setDestinationInExternalPublicDir("/Sohail_Temp", "test.jpg");
        enqueue = dm.enqueue(request);
    }

    public void showDownload(View view) {
        Intent i = new Intent();
        i.setAction(DownloadManager.ACTION_VIEW_DOWNLOADS);
        startActivity(i);
    }
}

Layout:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="onClick"
        android:text="Start Download"></Button>

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="showDownload"
        android:text="View Downloads"></Button>

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/image_1"></ImageView>
</LinearLayout>

Permissions:

 <uses-permission android:name="android.permission.INTERNET" />
 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
like image 91
Sohail Zahid Avatar answered Oct 14 '22 20:10

Sohail Zahid