Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>Then simply try this - </p> <pre><code>private static final String TAG = "Image"; @SuppressWarnings("unused") private boolean isImage = false; private String reviewImageLink; /** Called when the activity is first created. */ @SuppressWarnings("unused") @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); reviewImageLink = getString(R.string.ImageURI); // ImageURL URL reviewImageURL; String name = reviewImageLink.substring(reviewImageLink .lastIndexOf("/") + 1); try { reviewImageURL = new URL(reviewImageLink); if (!hasExternalStoragePublicPicture(name)) { isImage = false; new DownloadImageTask().execute(reviewImageURL); Log.v("log_tag", "if"); isImage = true; File sdImageMainDirectory = new File(Environment .getExternalStorageDirectory(), getResources() .getString(R.string.directory)); // Storing Directory sdImageMainDirectory.mkdirs(); File file = new File(sdImageMainDirectory, name); Log.v("log_tag", "Directory created"); } } catch (MalformedURLException e) { Log.v(TAG, e.toString()); } } private class DownloadImageTask extends AsyncTask&lt;URL, Integer, Bitmap&gt; { // This class definition states that DownloadImageTask will take String // parameters, publish Integer progress updates, and return a Bitmap protected Bitmap doInBackground(URL... paths) { URL url; try { url = paths[0]; HttpURLConnection connection = (HttpURLConnection) url .openConnection(); int length = connection.getContentLength(); InputStream is = (InputStream) url.getContent(); byte[] imageData = new byte[length]; int buffersize = (int) Math.ceil(length / (double) 100); int downloaded = 0; int read; while (downloaded &lt; length) { if (length &lt; buffersize) { read = is.read(imageData, downloaded, length); } else if ((length - downloaded) &lt;= buffersize) { read = is.read(imageData, downloaded, length - downloaded); } else { read = is.read(imageData, downloaded, buffersize); } downloaded += read; publishProgress((downloaded * 100) / length); } Bitmap bitmap = BitmapFactory.decodeByteArray(imageData, 0, length); if (bitmap != null) { Log.i(TAG, "Bitmap created"); } else { Log.i(TAG, "Bitmap not created"); } is.close(); return bitmap; } catch (MalformedURLException e) { Log.e(TAG, "Malformed exception: " + e.toString()); } catch (IOException e) { Log.e(TAG, "IOException: " + e.toString()); } catch (Exception e) { Log.e(TAG, "Exception: " + e.toString()); } return null; } protected void onPostExecute(Bitmap result) { String name = reviewImageLink.substring(reviewImageLink .lastIndexOf("/") + 1); if (result != null) { hasExternalStoragePublicPicture(name); saveToSDCard(result, name); isImage = true; } else { isImage = false; } } } public void saveToSDCard(Bitmap bitmap, String name) { boolean mExternalStorageAvailable = false; boolean mExternalStorageWriteable = false; String state = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED.equals(state)) { mExternalStorageAvailable = mExternalStorageWriteable = true; Log.v(TAG, "SD Card is available for read and write " + mExternalStorageAvailable + mExternalStorageWriteable); saveFile(bitmap, name); } else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) { mExternalStorageAvailable = true; mExternalStorageWriteable = false; Log.v(TAG, "SD Card is available for read " + mExternalStorageAvailable); } else { mExternalStorageAvailable = mExternalStorageWriteable = false; Log.v(TAG, "Please insert a SD Card to save your Video " + mExternalStorageAvailable + mExternalStorageWriteable); } } private void saveFile(Bitmap bitmap, String name) { String filename = name; ContentValues values = new ContentValues(); File sdImageMainDirectory = new File(Environment .getExternalStorageDirectory(), getResources().getString( R.string.directory)); sdImageMainDirectory.mkdirs(); File outputFile = new File(sdImageMainDirectory, filename); values.put(MediaStore.MediaColumns.DATA, outputFile.toString()); values.put(MediaStore.MediaColumns.TITLE, filename); values.put(MediaStore.MediaColumns.DATE_ADDED, System .currentTimeMillis()); values.put(MediaStore.MediaColumns.MIME_TYPE, "image/png"); Uri uri = this.getContentResolver().insert( android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); try { OutputStream outStream = this.getContentResolver() .openOutputStream(uri); bitmap.compress(Bitmap.CompressFormat.PNG, 95, outStream); outStream.flush(); outStream.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } private boolean hasExternalStoragePublicPicture(String name) { File sdImageMainDirectory = new File(Environment .getExternalStorageDirectory(), getResources().getString( R.string.directory)); File file = new File(sdImageMainDirectory, name); if (file != null) { file.delete(); } return file.exists(); } </code></pre> <p>In my case the <code>strings.xml</code></p> <pre><code>&lt;string name="ImageURI"&gt;http://cdn.sstatic.net/stackoverflow/img/tag-logo-android.png&lt;/string&gt; &lt;string name="directory"&gt;/DCIM&lt;/string&gt; </code></pre> <p>From this you can directly give the imageUrl in <code>reviewImageLink</code> or can give in <code>String</code> resource. This will be same for <code>directory</code> also.</p> <p>Hope this helps you lot.</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload