آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

ذخیره عکس درون کارت حافظه (حل شد)

Mohammad  11 سال پیش  11 سال پیش
+2 0

سلام.

من کل تاپیک ها درباره این موضوع رو گشتم ولی به جواب نرسیدم.

اگه میشه کمک کنید چطور عکسهای درون برنامه رو در کارت حافظه ذخیره کنم؟

برنامه گالری عکس هست که میخام یکی یکی به دلخواه کاربر ذخیره بشه!

خیلی ممنونم...

0 0
دوستان خواهشا کمک کنید خیلی واجبه!!! (11 سال پیش)
0 0
دوستان خواهشا کمک کنید خیلی لازمه.. (11 سال پیش)
 برای این سوال 4 پاسخ وجود دارد.
پاسخ به سوال 
mohsen-jj  11 سال پیش
+4 0

سلام .

اول توضیحاتش رو مینویسم بعد کدها .

Dir_SDCARD درواقع آدرس مموری رو پیدا میکنه .

DIR_MYFOLDER هم آدرسی هست که شما در ادامه آدرس مموری وارد میکنید تا فایلها اونجا کپی بشن .

HelperIO  هم یه class هست واسه کپی کردن فایلها که باید این class رو به پروژه تون اضافه کنید .توی قسمت 2 از فصل 19 آموزشهای استاد این class توضیح داده شده و سورسش هست اگه ندارید براتون میذارم .

اون file که تعریف شده میشه اسم فایل بعد از کپی شدن در مموری .

در قسمت assetmanager.open باید اسم فایل اصلی که شما در پوشه assets پروژه تون کپی کردید باشه (دقت کن که عکسا باید در پوشه ی assets کپی شوند .

 

 final String DIR_SDCARD = Environment.getExternalStorageDirectory()
.getAbsolutePath();

final String DIR_MYFOLDER = DIR_SDCARD + "/pictures/";

new File(DIR_MYFOLDER ).mkdirs();

File file = new File(DIR_MYFOLDER + "/"
+ "Myimage.jpg");


AssetManager assetmanager = G.context.getAssets();
InputStream inputstream;
try {
inputstream = assetmanager
.open("Image.jpg");
HelperIO.copyFile(inputstream, DIR_MYFOLDER + "/"
+ "Myimage.jpg");
} catch (Exception e) {
// TODO: handle exception
}


 

0 0
واقعا ممنونم از کمکتون!!فقط ی چیزی...تعداد عکس ها زیاد باشه چطور باید تک تک ذخیره کنم؟ (11 سال پیش)
+2 0
خواهش میکنم . فقط دکمه ی تشکر رو بزنید کافیه :)))) اگه میخواید هر عکس که کاربر انتخاب کرد ذخیره بشه همین کدها رو بنویس فقط به جای اینکه اسم عکس که MyImage.jpg بود رو بنویسی به جاش از یه متغیر String به همراه فرمت عکس که jpg هست استفاده کن . کافیه برا هر عکس که کاربر انتخاب میکنه یه اسم که همون متغیر String هست در نظر بگیری و بعد مثلا بجای MyImage.jpg مینویسی imageName + ".jpg" که imageName همون متغیر String هست . از این به بعد هر عکسی که کاربر انتخاب کرد همون ذخیره میشه . پیاده سازیش با خودتون دیگه . توضیحات کلیش همین بود . بازم اگه مشکلی داشتید در خدمتم . (11 سال پیش)
0 0
اگر امکانش هست کد کلاس های این بخش را هم قرار دهید.. با تشکر (11 سال پیش)
+1 0
منظورتون کدوم هست ؟همون HelperIO که استاد توضیح داده بود ؟ (11 سال پیش)
0 0
آقا محسن، میگم برنامه من طوری که کاربر از گالری عکس انتخاب میکنه! ((اون قسمتی که گفتید عکس رو در پوشه assets قرار بدید))میخام اون عکسی که کاربر از گالری انتخاب کرد ذخیره بشه!من فقط ایمیج ویو قراردادم...از کجا بفمهم نام عکس کاربر چیه>؟ (11 سال پیش)
0 0
شما سوال کرده بودید چطور میشه عکس رو از داخل برنامه به حافظه انتقال داد . حالا اگه برعکسش رو میخواید قضیه کاملا متفاوت میشه و کدها جور دیگه ای میشه . میخواید کاربر از عکسهای خودش انتخاب کنه و به داخل برنامه انتقال پیدا کنه ؟دقیقا چی می خواید؟ (11 سال پیش)
0 0
خیلی ممنون از پیگیریتون!ببینید برنامه من طوری که کاربر عکس از گالری انتخاب میکنه و روش تغییراتی ایجاد میکنه و اونو ذخیره میکنه! ببخشید که گمراهتون کردم! (11 سال پیش)
0 0
خواهش می کنم . اوکی ، الان تونستید کدی بزنید که کاربر بتونه از گالری عکس انتخاب کنه ؟ (11 سال پیش)
0 0
بله...همه چی ردیفه فقط میخام این عکسی که کاربر از گالری خودش انتخاب کرده ذخیره بشه!الان همه ی کد ها درسته فقط نمیدونم چطور ذخیره کنم! (11 سال پیش)
پاسخ به سوال 
mohsen-jj  11 سال پیش
+2 0

کلاس G چیزاییش که اینجا لازم هست رو نوشتم . توجه کنید که در manifest برنامه شما ، در قسمت application باید این کد رو اضافه کنید تا کلاس G رو بشناسه :

android:name=".G"

کلاس HelperIO رو هم نوشتم که باید به پروژه تون اضافه کنید .

 

 public class G extends Application {

public static Context context;



@Override
public void onCreate() {
super.onCreate();
context = getApplicationContext();


}

/////////////////////////////////////////////////////////////////////////////



import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.channels.FileChannel;

public class HelperIO {

public static void closeStream(InputStream stream) {
try {
stream.close();
} catch (IOException e) {
e.printStackTrace();
}
}

public static void closeStream(OutputStream stream) {
try {
stream.flush();
stream.close();
} catch (IOException e) {
e.printStackTrace();
}
}

public static void closeChannel(FileChannel channel) {
try {
channel.close();
} catch (IOException e) {
e.printStackTrace();
}
}

public static void copyFile(String inputFilename, String outputFilename) {
InputStream inputStream = null;
OutputStream outputStream = null;
try {
inputStream = new FileInputStream(inputFilename);
outputStream = new FileOutputStream(outputFilename);

copyFile(inputStream, outputStream);
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
closeStream(inputStream);
closeStream(outputStream);
}
}

public static void copyFile(String inputFilename, OutputStream outputStream) {
InputStream inputStream = null;
try {
inputStream = new FileInputStream(inputFilename);

copyFile(inputStream, outputStream);
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
closeStream(inputStream);
closeStream(outputStream);
}
}

public static void copyFile(InputStream inputStream, String outputFilename) {
OutputStream outputStream = null;
try {
outputStream = new FileOutputStream(outputFilename);

copyFile(inputStream, outputStream);
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
closeStream(inputStream);
closeStream(outputStream);
}
}

public static void copyFile(InputStream inputStream,
OutputStream outputStream) {
byte[] buffer = new byte[8 * 1024];
int lenRead = 0;
try {
while ((lenRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, lenRead);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
closeStream(inputStream);
closeStream(outputStream);
}
}
}


0 0
خب اگر گوشی کاربر کارت حافظه نداشته باشه و یا کارت حافظه نصب نشده باشه و یا کارت جافظه پر باشه آیا باز هم این کد جواب میده؟ (11 سال پیش)
پاسخ به سوال 
محمد  11 سال پیش
+1 0

برای بررسی وجود sdcard میتونی از این کد استفاده کنی.

 publicstaticfinalString DIR_SDCARD =/storage/sdcard1;
File sdDirectory =newFile(DIR_SDCARD);
if(sdDirectory.listFiles()!=null){
Log.i("LOG","sdcard exist");
}else{
Log.i("LOG","sdcard not exist");
}

چطور بفهمیم حافظه داخلی یا خارجی پر هست رو نمیدونم

0 0
این کد روو تمام گوشی ها درست جواب میده؟ظاهرا بر روی بعضی مدل ها ی هواوی با مشکل روبرو میشه.البته مطمعن نیستم ولی توو همین انجمن انگار یه جا بحثش بود. (11 سال پیش)
+1 0
من روی sony xperia z1 و huawei G615 تست کردم (11 سال پیش)
پاسخ به سوال 
محمد  11 سال پیش
+2 0

برای انتخاب عکس از گالری میتونید از کد زیر استفاده کنید:

 Intent galleryIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(galleryIntent, PICK_FROM_GALLERY);

برای گرفتن آدرس عکس هم از کد زیر:

    String filePath;
final int PICK_FROM_GALLERY = 2;

 @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == PICK_FROM_GALLERY && resultCode == RESULT_OK && data != null) {
Uri uri = data.getData();
String[] filePathColumn = {MediaStore.Images.Media.DATA};

Cursor cursor = getContentResolver().query(uri, filePathColumn, null, null, null);
cursor.moveToFirst();

int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
filePath = cursor.getString(columnIndex);
cursor.close();
}
}
+1 0
بله از این کدها استفاده کن ، درواقع کد باینری اون عکس در متغیر filePath قرار میگیره و میتونی این کد رو دریه جایی مثل دیتابیس نگه داری و برای خوندن مجدد اون عکس میتونی از کد img.setImageBitmap(BitmapFactory.decodeFile(filePath) استفاده کنی . img یه image view هست . (11 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .