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

  کپی کردن تعداد زیادی عکس در SD Card

RoOTmAn  11 سال پیش  11 سال پیش
+3 0

سلام...

میخوام 250 تا عکس رو کپی کنم داخل SD Card...

برای اینکار کلاس HelperIO رو تعریف کردم ، بعد برای تست ، یکی از عکس ها رو کپی کردم داخل SD Card ، بعدش گالری رو اسکن کردم که عکس ها همون موقع نمایش داده بشن...

تا این جاش مشکلی نیست...

چند تا سوال :

1 - لازمه که قبل از Copy ، چک بشه که SD Card وجود داره یا نه ...!؟ مگه SD Card همون حافظه داخلی نیست ؟ پس مگه میشه وجود نداشته باشه !؟ آخه تو Stackoverflow بعضیا گفتن قبل از Copy باید بودن یا نبودن SD Card چک بشه !! لازمه !؟

2- سر امولاتور و گوشی که تست کردم ، در صورتی که یک فایل ( هم نام ) وجود داشته باشه ، بار دوم Replace میشه ...حالا میخواستم بدونم توی تموم دیوایس ها اینطوریه ؟ یا لازمه قبل از Copy چک بشه که اگه فلان فایل ( از نظر اسم )  وجود داشت ، دیگه کپی نشه ؟  (میخوام از هر عکس یک بار بیشتر کپی نشه) 

3- برای کپی به SD Card ازین استفاده میکنم:

new File(DIR_MYFOLDER).mkdirs();

        File file = new File(DIR_MYFOLDER + "/"
                + "test.png");

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

چجوری میشه تغییرش داد که نخوام دونه به دونه 250 عکس رو براش تعریف کنم ؟ با آرایه میشه ؟ یا مثلا با Zip کردن بعد Unzip ؟ یا بهتره کل Assets کپی بشه داخل SD Card ...؟ بهترین راهش چیه؟ 

سوال آخر :

حجم کل فایل هایی که میخوام کپی کنم 20Mb عه , چجوری میشه براش یه ProgressBar بذارم که روند کپی فایل ها رو نشون بده ؟ ( منظورم اینه که ProgressBar بر  چه اساسی باید بره جلو...؟ ) 

 

ببخشید سوالام زیاد شد :D

ممنون...

+1 0
1- اگر اشتباه نکنم SD همون کارت خروجی دستگاهه :) و باید حتما چک بشه که داره یا نه. یه کد داخل انجمن هست که بررسی میکنه اگر اینسرت شده فایل های مورد نظرت رو می ریزه اونجا و اگر نشده باشه میریزه روی حافظه داخلی. 3- می تونی عکس ها رو با یک نام کلی مثل filex.png لیست کنی و هر عکس یک شماره با x داشته باشه و با یه حلقه for همه رو کپی کنی . یا اینکه مستقیماً همه رو زیپ کنی روی خود Assets و کپی و آنزیپ کنی . (11 سال پیش)
+1 0
ممنون.../ مشکل کپی کردن کل فایل ها با for حل شد ;-) با Zip هم تست کردم،Ok بود... / فقط موند ProgressBar که اگه با for تعریف کنم اینم حل میشه ... / یه سوال فقط : آدرس SD Card اگه به صورتی که استاد توی آموزش ها گفتن،تعریف بشه...میشه حافظه داخلی گوشی یا خارجی ؟ آخه به کدش میخوره حافظه خارجی باشه... ولی موقع تست ، چه روی گوشی و چه روی امولاتور ، حافظه داخلی در نظر گرفته میشه...!!! (11 سال پیش)
 برای این سوال 1 پاسخ وجود دارد.
پاسخ به سوال 
hamidd  11 سال پیش
+2 0

گوشی های قدیمی کارت حافظه رو به عنوان external storage در نظر می گرفتن ولی گوشی های جدید حافظه ی داخلی گوشی رو به عنوان external storage در نظر می گیرن. شما برای  بهتر کار کردن برنامه و جلوگیری از کرش کردن باید چک کنید ببینید کارت حافظه وجود داره یا نه با این کد.

 if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
// your code here
}

اگه گوشی از اون گوشی های قدیمی باشه در صورتی شرط true میشه که گوشی حتما کارت حافظه داشته باشه. ولی اگه گوشی از این گوشی های جدید باشه در هر صورت شرط true میشه. پس نتیجه می گیریم که باید حتما چک کنیم که کارت حافظه وجود داره یا نه (تا در گوشی های قدیمی برنامه کرش نکنه) و بعد عملیات رو انجام بدیم.


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