PDA

View Full Version : مشکل نشان دادن تصویر در البوم گوشی



rezaeade
دوشنبه 28 مهر 1393, 17:21 عصر
سلام خسته نباشید
دوستان من یه برنامه گالری ساختم وتوش یه دکمه قرار دادم که وقتی کاربر روش کلیک کنه عکس روی کارت حافظه توی پوشه ای که براش تعریف کردم کپی شه تا اینجای کار هیچ مشکلی ندارم و برنامه به خوبی کار میکنه فقط مشکلم اینجاست که عکسها بعد از ذخیره شدن توی گوشی توسط البوم گوشی نمایش داده نمیشه باید گوشی یک بار خاموش و روشن شه تا عکس توی البوم گوشی بیاد حالا سوالم اینه که چیکار کنم تا بلافاصله بعد از ذخیره شدن تصویر توی گالری هم نمایش داده شه و نیاز به خاموش و روشن کردن نباشه . لطفا راهنماییم کنید

StoPpeR
دوشنبه 28 مهر 1393, 18:55 عصر
با استفاده از این کد می تونین گالری رو مجبور کنین تا این فولدر رو دوباره جستجو کنه و اگه عکس جدیدی بود اضافه کنه:

sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri));

uri هم آدرس عکس مورد نظرتونه (آدرسی که بعد از کپی کردن عکس روی حافظه بدست میارید)

rezaeade
دوشنبه 28 مهر 1393, 19:01 عصر
ممنون از جوابتون ولی این کد رو کجا اضافه کنم؟

rezaeade
دوشنبه 28 مهر 1393, 23:16 عصر
با استفاده از این کد می تونین گالری رو مجبور کنین تا این فولدر رو دوباره جستجو کنه و اگه عکس جدیدی بود اضافه کنه:

sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri));

uri هم آدرس عکس مورد نظرتونه (آدرسی که بعد از کپی کردن عکس روی حافظه بدست میارید)


دوست عزیز این کدی که دادید وقتی توی برنامه میزارمش sendBroadcast ارور میگیره

StoPpeR
سه شنبه 29 مهر 1393, 00:29 صبح
ممنون از جوابتون ولی این کد رو کجا اضافه کنم؟

بعد از کد سیو کردن عکس

دوست عزیز این کدی که دادید وقتی توی برنامه میزارمش sendBroadcast ارور میگیره

احتمالا در یه کلاس جانبی دارین کد می نویسین
this.sendBroadcast رو امتحان کنین ببینین چی میشه...

rezaeade
سه شنبه 29 مهر 1393, 01:03 صبح
ممنون از اینکه جواب میدین ولی باز ارور میده

کدی رو هم که وارد کردم اینه:


this.sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory())));

StoPpeR
سه شنبه 29 مهر 1393, 10:32 صبح
متن ارور رو بذار

rezaeade
سه شنبه 29 مهر 1393, 11:39 صبح
دوست عزیز این قسمتی هست که من کد رو استفاده کردم بیبینید درسته؟



public void saveImageToSDCard(Bitmap bitmap) {

File filepath = Environment.getExternalStorageDirectory();

File myDir = new File(filepath.getAbsolutePath()
+ "/bargwallpaper/");

sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("/bargwallpaper/" + Environment.getExternalStorageDirectory())));

myDir.mkdirs();
Random generator = new Random();
int n = 10000;
n = generator.nextInt(n);
String fname = "Wallpaper-" + n + ".jpg";
File file = new File(myDir, fname);
if (file.exists()){

}

file.delete();
try {
FileOutputStream out = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
out.flush();
out.close();








Toast.makeText(
_context,
_context.getString(R.string.toast_saved).replace("#",
"\"" + pref.getGalleryName() + "\""),
Toast.LENGTH_SHORT).show();
Log.d(TAG, "Wallpaper saved to: " + file.getAbsolutePath());



} catch (Exception e) {
e.printStackTrace();
Toast.makeText(_context,
_context.getString(R.string.toast_saved_failed),
Toast.LENGTH_SHORT).show();
}

}

rezaeade
سه شنبه 29 مهر 1393, 21:32 عصر
دوست عزیز این هم ارروری هست که میده

The method sendBroadcast(Intent) is undefined for the type Utils

StoPpeR
سه شنبه 29 مهر 1393, 22:09 عصر
بفرمایین:

public void saveImageToSDCard(Bitmap bitmap, Activity act) {

File filepath = Environment.getExternalStorageDirectory();

File myDir = new File(filepath.getAbsolutePath()
+ "/bargwallpaper/");

myDir.mkdirs();
Random generator = new Random();
int n = 10000;
n = generator.nextInt(n);
String fname = "Wallpaper-" + n + ".jpg";
File file = new File(myDir, fname);
if (file.exists()){
file.delete();
}
try {
FileOutputStream out = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
out.flush();
out.close();


Toast.makeText(
_context,
_context.getString(R.string.toast_saved).replace(" #",
"\"" + pref.getGalleryName() + "\""),
Toast.LENGTH_SHORT).show();
Log.d(TAG, "Wallpaper saved to: " + file.getAbsolutePath());

act.sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse(myDir.getAbsolutePath())));

} catch (Exception e) {
e.printStackTrace();
Toast.makeText(_context,
_context.getString(R.string.toast_saved_failed),
Toast.LENGTH_SHORT).show();
}

}


نکاتی که از کدتون تغییر دادم:
اول اینکه کدتون اشکالات اساسی داره که به نظرم نشون از بی تجربه بودنتونه، مثلا باید دستور پاک کردن فایل رو داخل متد شرطیتون قرار می دادید یا اینکه برای مشخص کردن آدرس اول باید حافظه جانبی رو بنویسین و بعد فولدر مورد نظرتون و... پیشنهاد می کنم یکم بیشتر روی پایه برنامه نویسی جاواتون کار کنین
دوم اینکه اون ارور هم همونطور که گفتم واسه این بود که در یه کلاس جانبی کد رو نوشتین، واسه همین باید حتما Context رو لحاظ کنین... من اینجا اومدم یه کلاس اکتیویتی به داده های دستور اضافه کردم و واسه همین موقع فراخونی این دستور باید علاوه بر bitmap کانتکس رو هم لحاظ کنین (مثلا: YourActivity.this)
سوم هم در مورد محل قرار گیری کدی که من دادم هم باید بعد از لود شدن عکس قرارش می دادین، چون قبلش اصلا عکسی وجود نداشته که بخواد به گالری اضافه اش کنه

امیدوارم توضیحاتم کامل بوده باشه
بازم سوالی بود بپرسین
موفق باشین

rezaeade
سه شنبه 29 مهر 1393, 22:42 عصر
دوست عزیز خیلی ازتون ممنون . من این کد رو که دادید جایگزین کردم تو برنامه ولی باز عکسا رو توی گالری نمیاره

StoPpeR
سه شنبه 29 مهر 1393, 22:56 عصر
آیا لاگ
Log.d(TAG, "Wallpaper saved to: " + file.getAbsolutePath());

رو دریافت می کنین؟

این رو واسه uri امتحان کنین:

Uri.fromFile(file)

rezaeade
سه شنبه 29 مهر 1393, 23:01 عصر
بله عکس زخیره میشه ولی توی گالری نشون داده نمیشه

rezaeade
چهارشنبه 30 مهر 1393, 01:09 صبح
دوست عزیز ممنون از راهنمایتون من اشتباهم رو پیدا مردم و درستش کردم از اینکه کمک کردین ممنون