کلیدستان

نسخه‌ی کامل: ذخیره فایل از پوشه raw بر روی sdcard
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
اگه بخوام یه فیلم رو که در پوشه raw قرار داره به اشتراک بزارم اول باید اونو روی گوشی کاربر ذخیره کنم تا بتونم اونو ارسال کنم .
سوالم اینه که چطور میتونم اونو ذخیره کنم ؟

آیا این درسته :

کد:
File root = android.os.Environment.getExternalStorageDirectory();
File dir = new File (root.getAbsolutePath() + "android.resource://ir.moralschool.madar/"+R.raw.film1);


کد:
String fileName = "film1.mp4";
File file = new File(dir, fileName);

Uri outputFileUri = Uri.fromFile(file);


-----------------
Intent ای که بکار میبرم برای اشتراک هم اینه :

کد:
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("video/mp4");
intent.putExtra(Intent.EXTRA_STREAM, outputFileUri);
startActivity(Intent.createChooser(intent, "انتخاب روش ارسال"));
سلام.
کدهاتون برای کپی کردن فایل از پوشه raw به درون حافظه خارجی (External Storage)، صحیح نیست. در این رابطه، کلید زیر را برایتان نوشتم :

http://www.kelidestan.com/keys/keys.php?key=848

در مورد کدهای به اشتراک گذاری با Intent  ، به نظرم بدون مشکل است و صحیح می باشد. منظورم کدهای زیر است که نوشته اید :

کد:
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("video/mp4");
intent.putExtra(Intent.EXTRA_STREAM, outputFileUri);
startActivity(Intent.createChooser(intent, "انتخاب روش ارسال"));

و فقط برای کدهای فوق، outputFileUri مناسب را بر حسب مسیر فایل در حافظه خارجی، بسازید (Uri از مسیر فایل در حافظه خارجی).

در ضمن، بد نیست شما با مفهوم Content Providers نیز کمی آشنا شوید زیرا Content Providers نیز برای به اشتراک گذاری به کار می رود، ولی از Intent پیچیده تر است (منظورم اینه که می تونید به مرور در مورد آن نیز بخوانید تا در برنامه های اندرویدی که در آینده می سازید، در صورت دلخواه، از آن برای به اشتراک گذاری استفاده کنید).

کدی که گفتید رو به شکل زیر استفاده کردم ولی متاسفانه موقعی که میخوام فایل رو به اشتراک بزارم میگه فایل نامعلوم ارسال نشد !
لطفا ببینید کجای کدم اشکال داره :

کد پی‌اچ‌پی:
File root android.os.Environment.getExternalStorageDirectory();
                
String folderName "/my_film";
                
File dir = new File (root.getAbsolutePath() + folderName);
                if(!
dir.exists()) {                                
                    
dir.mkdirs(); // build directory
                
}
                               
                
InputStream in getResources().openRawResource(R.raw.film1);
                
String filename "film1.mp4";
                
File f = new File(filename);
                if(!
f.exists()){
                    try {
                        
OutputStream out = new FileOutputStream(new File(root folderName filename));
                        
byte[] buffer = new byte[1024];
                        
int len;
                        while((
len in.read(buffer0buffer.length)) != -1){
                            
out.write(buffer0len);
                        }
                        
in.close();
                        
out.close();
                    } catch (
FileNotFoundException e) {
                        
//
                    
} catch (IOException e) {
                        
//
                    
}
                }
                        

                        
Uri outputFileUri Uri.fromFile(f);
                        
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("video/mp4");
                        
intent.putExtra(Intent.EXTRA_STREAMoutputFileUri);
                        
startActivity(Intent.createChooser(intent"انتخاب روش ارسال")); 
 
مسیر فایل رو اشتباه تعیین کردید. به خط زیر توجه کنید :

کد:
Uri outputFileUri = Uri.fromFile(f);

f تنها شامل نام فایل می باشد. شما باید مسیر کامل را تعیین کنید. خوب من کدها رو تغییر دادم تا دیگه این مشکل پیش نیاد و f شامل مسیر کامل فایل باشد (در واقع در کد قبلی ، روش exists بیهوده بود و نمی توانست وجود فایل را چک کنید، فایل ساخته می شد اما وجود آن را اشتباه چک می کرد). دوباره به آن مبحث رفته و این بار، کدهای بخش اولتان را بر اساس آن بنویسید (کدهای آن مبحث تصحیح شدند).

ممنون