به اشتراک گذاری (share) عکس، در برنامه نویسی اندروید
اگرچه در اکثر مراجع، شیوه به اشتراک گذاری عکس با Intent را آموزش می دهند، اما اکثر کاربران نمی دانند که باید ابتدا یک کپی از عکس در حافظه خارجی (External Storage) تهیه کنند تا به اشتراک گذاری به طور صحیح عمل کند. زیرا اگر اینگونه کد ننویسند، ممکن است که به اشتراک گذاری بتواند به برخی برنامه ها، عکس را بفرستد اما برای برخی دیگر (مثل bluetooth)، عکس ارسال نگردد. بنابراین، قصد دارم که در این آموزش، یک کد کامل را برای این منظور شرح بدهم تا روند به اشتراک گذاری با Intent را به طور کامل متوجه بشوید.
علاوه بر این، بد نیست تذکر بدهیم که معمولا برای به اشتراک گذاری، از Content Provider نیز می توان استفاده کرد که کمی پیچیده تر است، اما در این مبحث، تنها به اشتراک گذاری با Intent را شرح می دهیم.
توسط کدهایی که شرح خواهیم داد، ابتدا یک فولدر با نام myFolder ساخته می شود که قرار است درون آن فایلی به صورت کپی از عکس مورد نظر ما ساخته شود (که در گالری نیز قابل مشاهده خواهد بود، البته فقط در برخی گوشی ها. برای قابل مشاهده بودن در همه گوشی ها، باید یک سری کد نوشته شود که فعلا در این مبحث، به آن نمی پردازیم)، سپس عکس اصلی مورد نظرمان که دارای نام image_1 است، از فولدر مخصوص عکس برنامه اندروید (پوشه drawable) خوانده شده و به bitmap تبدیل می شود و سپس bitmap را به صورت یک کپی از عکس اصلی، در فولدر myFolder ذخیره می کنیم. در آخر از Intent ، برای به اشتراک گذاری عکس کپی شده در فولدر myFolder استفاده خواهیم کرد. نکته مهم این است که اگر از عکس، در حافظه خارجی (external storage) کپی تهیه نمی کردیم و سعی می کردیم که خود عکس را به اشتراک بگذاریم، ممکن بود که برای برخی برنامه ها (مثل bluetooth) عکس مورد نظرمان ارسال نگردد.
نام عکسی که به صورت کپی تهیه می شود، یک نام با پیشوند Image_ و یک عدد تصادفی و با فرمت .jpg خواهد بود.
کدها به صورت زیر می باشند :
File dir = new File (root.getAbsolutePath() + "/myFolder");
dir.mkdirs(); // build directory
Random generator = new Random();
int n = 10000;
n = generator.nextInt(n);
String fileName = "Image-"+ n +".jpg";
File file = new File(dir, fileName);
if (file.exists ()) file.delete ();
try {
FileOutputStream outStream = new FileOutputStream(file);
InputStream is;
Bitmap bitmap;
is = this.getResources().openRawResource(R.drawable.image_1);
bitmap = BitmapFactory.decodeStream(is);
try {
is.close();
is = null;
} catch (IOException e) {
}
bitmap.compress(Bitmap.CompressFormat.JPEG, 90, outStream);
outStream.flush();
outStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
Uri outputFileUri = Uri.fromFile(file);
Intent intent = new Intent(Intent.ACTION_SEND);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.setType("image/jpeg");
intent.putExtra(Intent.EXTRA_STREAM, outputFileUri);
startActivity(Intent.createChooser(intent, "Share this image via"));
علاوه بر استفاده از کدهای بالا، دقت شود که باید کدهای زیر درون AndroidManifest.xml پروژه اندروید نوشته شود (برای اجازه دادن برای ساخت فایل در حافظه خارجی و یا خواندن یک فایل از حافظه خارجی) :
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
سلام
این سورس کار نمی کنه میشه لطف کنید راهنمایی کنید
همه برنامه ها عالی توضیح داده شدن ولی این قسمت شیر کردن عکس ن
لطفا بصورت کامل آموزش بدین