انجمن سایت کلیدستان



خطای sd card (در برنامه نویسی اندروید)زمان کنونی: ۱۳۹۵/۰۹/۱۵، ۰۸:۵۵ ق.ظ
کاربران در حال بازدید این موضوع: 1 مهمان
نویسنده: samaneh_62
آخرین ارسال: dost-67
پاسخ 11
بازدید 3462

رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
خطای sd card (در برنامه نویسی اندروید)

خطای sd card (در برنامه نویسی اندروید)

#1
خسته نباشید
من برای دانود فایل مسیر sdcard رو میدم ولی خطای زیر رو بهم میده.هیچ جا دلیلش رو پیدا نکردم حتی در سایت های خارجی
به نظر شما علتش چیه؟
سوال دیگه این که اگر این مسیرو بدم برالی ذخیره ی فایل،تو همه ی گوش ها هست یا تو گوشی های گوناگون فرق میکنه؟در این صورت مسیر دانلود رو چی باید بدیم که بین همه مشترک باشه؟
سپاس بابت تلاش هاتون
پاسخ

خطای sd card (در برنامه نویسی اندروید)

#2
پیغام خطاش اینه:
download error:java.io.filenotfoundException:/sdcard/jirjirak.mp3:open failed:EACCES(permition denied)
پاسخ

خطای sd card (در برنامه نویسی اندروید)

#3
سلام.
ببینید اجازه های دسترسی زیر را در فایل AndroidManifest.xml ذکر کرده اید یا خیر (برای خواندن و نوشتن در حافظه خارجی) :

کد پی‌اچ‌پی:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<
uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 


این طور که متوجه شدم، شما فایلی با نام jirjirak.mp3 را در پوشه بندی اصلی گوشی کپی کرده اید (یا قصد دارید که بسازید) و اکنون برای دسترسی به آن (یا مسیری که برای ساخت آن تعریف کرده اید)، مسیر پوشه بندی اصلی (یعنی مسیر حافظه خارجی (external storage))، را به صورت زیر در نظر گرفته اید :

کد پی‌اچ‌پی:
/sdcard

مسیر فوق برای برخی گوشی ها، متناظر با مسیر پوشه بندی اصلی نیست. مسیر پوشه بندی اصلی گوشی را بر اساس کلید زیر به دست آورید (برای تمام گوشی ها به درستی عمل می کند)(البته ممکن است که از آن استفاده کرده باشید و مسیر به دست آمده در گوشی مورد نظر، به صورت فوق باشد، ولی گفتم که تذکر بدهم، اگر از کلید زیر استفاده کرده اید، مشکلی نیست) :

کلید شماره 279

یک مثال مفید از آن :

کلید شماره 281

همچنین توصیه می شود که دسته بندی زیر را ببینید :

http://www.kelidestan.com/keys/categorie...ategory=15

bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ
 سپاس شده توسط alidarbedar

خطای sd card (در برنامه نویسی اندروید)

#4
 
کد پی‌اچ‌پی:
        imageView1_main_jirjirak.setOnClickListener(new OnClickListener() {
            public 
void onClick(View arg0) {
                 
File root android.os.Environment.getExternalStorageDirectory();
                
File file2=new File(root.getAbsolutePath() + "/jirjirak.mp3");
                
                if (
file2.exists()==true){
                     
Intent jirjirak=new Intent(Main.this,com.jirjirak.com.Main_JirjirakPage.class) ;
                                          }
                else
                    {
                    
Intent mydownload=new Intent(Main.this,com.jirjirak.com.Main_DownloadJirjirak.class) ;
                     
startActivity(mydownload);
                     
                    }
            }
        }); 

با کد بالا مسیر ذخیره فایل چک میشه که ببینه آیا فایل وجود داره یا نه.اگر وجود داشت میره به اکتیویتی مربوط به اون(تا اینجا مشکلی نیست) اگر وجود نداشت باید بره به اکتیویتی Main_DownloadJirjirak و دانلودش کنه که اینجا اون خطا رو میده.کد زیر مربوط به همین اکتیویتیه:

کد پی‌اچ‌پی:
// download the file

                        
File root android.os.Environment.getExternalStorageDirectory();
                        
File dir = new File (root.getAbsolutePath());
                        
File file = new File(dir"jirjirak.mp3");
                        
input connection.getInputStream();
                        
output = new FileOutputStream(root.getAbsolutePath() + "/jirjirak.mp3"); 

میشه لطفا مشکل رو بفرمایید؟شرمنده که زیاد وقتتون رو میگیرم.
امکان برگزاری کلاس آنلاین براتون وجود داره؟(با پرداخت هزینه)
مرسی
پاسخ

خطای sd card (در برنامه نویسی اندروید)

#5
ابتدا اجازه بدهید دو نکته را برای کدنویسی راحتتر به شما تذکر بدهم (تا عادت کنید اینگونه کد بنویسید).
خط زیر رو ببینید :

کد پی‌اچ‌پی:
if (file2.exists()==true

آن را به صورت زیر نویسید :

کد پی‌اچ‌پی:
if (file2.exists()) 

یا اگر نیاز بود که غلط (false) بودن را چک کنید، به صورت زیر نوشته می شد :

کد پی‌اچ‌پی:
if (!file2.exists()) 

همچنین به خط زیر توجه کنید :

کد پی‌اچ‌پی:
Intent mydownload=new Intent(Main.this,com.jirjirak.com.Main_DownloadJirjirak.class) ; 

اگر پروژه اندروید تنها یک package دارد، نیازی نیست که نام کامل Activity را ذکر کنید، بلکه می توانید آن را به صورت زیر بنویسید :

کد پی‌اچ‌پی:
Intent mydownload=new Intent(Main.this,Main_DownloadJirjirak.class); 

علامت ; را هم به آخرین کاراکتر بچسبانید.
این دو را فقط برای کدنویسی بهتر تذکر دادم.
اما در مورد مشکلی که برای دانلود داشتید، کدهاتون کمی عجیبه (فکر می کنم خلاصه کدها رو قرار دادید). تنها باید یک مسیر در کدها تعریف کنید، اما من دو تا مسیر در کدهای بالا می بینم.
توصیه می کنم کلید شماره 296 را با دقت بخوانید (یا هر کد دیگری که برای دانلود در نظر دارید) و تنها خط زیر را در آن بر اساس نکته ای که گفتم، تغییر بدهید :

کد پی‌اچ‌پی:
output = new FileOutputStream("/sdcard/myFile.apk");  //   /sdcard/file_name.extension 

متاسفانه فرصتی برای برگزاری کلاس آنلاین نیست.

bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ
 سپاس شده توسط aliasghar

خطای sd card (در برنامه نویسی اندروید)

#6
سپاس بابت توضیحاتتون
راستش من وقتی از عبارت sdcard برای ذخیره استفاده می کنم اون خطا رو میده ولی وقتی یه مسیری مثل/data/mine میدم اجرا میکنه و دانلود می کنه.وقتی سرچ کردم دیدم خیلی این مشکل رو دارن اما راه حل مناسبی براش نگفتن
پاسخ

خطای sd card (در برنامه نویسی اندروید)

#7
سلام برای شبیه ساز این مسیر فک نمیکنم درست جواب بده حتما باید روی گوشی واقعی تست کنید چون منم یه همچین مشکلی رو  قبلا  داشتم  رو گوشی درست جواب مبده ولی رو شبییه ساز خطا میگیره
موفق باشی
پاسخ
 سپاس شده توسط admin

خطای sd card (در برنامه نویسی اندروید)

#8
این کارم کردم نشد Sad(
پاسخ

خطای sd card (در برنامه نویسی اندروید)

#9
(۱۳۹۳/۱۰/۱۶, ۱۲:۰۹ ق.ظ)'samaneh_62' نوشته: سپاس بابت توضیحاتتون
راستش من وقتی از عبارت sdcard برای ذخیره استفاده می کنم اون خطا رو میده ولی وقتی یه مسیری مثل/data/mine میدم اجرا میکنه و دانلود می کنه.وقتی سرچ کردم دیدم خیلی این مشکل رو دارن اما راه حل مناسبی براش نگفتن

 


در ارسال های قبلی راه حل این مشکل را تذکر دادم (تذکر دادم که به جای عبارت sdcard ، باید دستور دیگری به کار رود که عبارت صحیح برای مسیر حافظه خارجی را به ما می دهد). همانجا که گفتم کلید شماره 279 را بخوانید.

bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ

خطای sd card (در برنامه نویسی اندروید)

#10
من مستقیما ننوشتم sdcARD و طبق گفته ی شما نوشتم.اگر اجازه بدین کل کدها رو براتون می نویسم .از سایت شما هم استفاده کردم فقط ببخشید که طولانیه
هدف: دانلود از اینترنت و ذخیره ی فایل در حافظه و بعد اجرای همون فایل در یک محیطی مثل مدیاپلیر.
1- فایل Main_DownloadJirjirak.java. قراره فایل رو از یه آدرسی دانلود کنه و تو حافظه ذخیره کنه:

کد پی‌اچ‌پی:
  
کد پی‌اچ‌پی:
public class Main_DownloadJirjirak extends Activity {
       public 
ProgressDialog mProgressDialog;
       private 
Button button1;
        @
Override
        
protected void onCreate(Bundle savedInstanceState) {
                
super.onCreate(savedInstanceState);
                
setContentView(R.layout.main_downloadjirjirak);
                
button1=(Button)findViewById(R.id.button1);
                final 
DownloadTask downloadTask = new DownloadTask(Main_DownloadJirjirak.this); // MainActivity = activity name
                 // instantiate it within the onCreate method
                
mProgressDialog = new ProgressDialog(Main_DownloadJirjirak.this); // MainActivity = activity name
                
mProgressDialog.setMessage("File is downloading ...");
                
mProgressDialog.setIndeterminate(true);
                
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
                
mProgressDialog.setCancelable(true);

                
button1.setOnClickListener(new OnClickListener() {
                    @
Override
                    
public void onClick(View arg0) {
                         
// execute this when the downloader must be fired
                        
                        
downloadTask.execute("https://yuma.servershost.net:2083/cpsess7509643735/download?skipencode=1&file=%2fhome%2fdastsazi%2fsound_gheseh%2fjirjirak.mp3"); // the url to the file you want to download
                        
                        
Intent Main_Page=new Intent(Main_DownloadJirjirak.this,Main.class) ;
                           
startActivity(Main_Page);
                    }
                });
               
                 
mProgressDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
                    @
Override
                    
public void onCancel(DialogInterface dialog) {
                        
downloadTask.cancel(true);
                    }
                });
        }

       
// usually, subclasses of AsyncTask are declared inside the activity class.
        // that way, you can easily modify the UI thread from here
        
private class DownloadTask extends AsyncTask<StringIntegerString> {

            private 
Context context;

            public 
DownloadTask(Context context) {
                
this.context context;
            }

            @
SuppressWarnings("resource")
            @
Override
            
protected String doInBackground(String... sUrl) {
                
// take CPU lock to prevent CPU from going off if the user
                // presses the power button during download
                
PowerManager pm = (PowerManagercontext.getSystemService(Context.POWER_SERVICE);
                
PowerManager.WakeLock wl pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
                     
getClass().getName());
                
wl.acquire();

                try {
                    
InputStream input null;
                    
OutputStream output null;
                    
HttpURLConnection connection null;
                    try {
                        
URL url = new URL(sUrl[0]);
                        
connection = (HttpURLConnectionurl.openConnection();
                        
connection.connect();

                        
// expect HTTP 200 OK, so we don't mistakenly save error report
                        // instead of the file
                        
if (connection.getResponseCode() != HttpURLConnection.HTTP_OK)
                             return 
"Server returned HTTP " connection.getResponseCode()
                                 + 
" " connection.getResponseMessage();

                        
// this will be useful to display download percentage
                        // might be -1: server did not report the length
                        
int fileLength connection.getContentLength();

                        
// download the file
                        
File root android.os.Environment.getExternalStorageDirectory();
                        
File file = new File(root.getAbsolutePath() + "/jirjirak.mp3");   
                        
inputconnection.getInputStream();
                        
output = new FileOutputStream(root.getAbsolutePath() + "/jirjirak.mp3");  

                        
byte data[] = new byte[4096];
                        
long total 0;
                        
int count;
                        while ((
count input.read(data)) != -1) {
                            
// allow canceling with back button
                            
if (isCancelled())
                                return 
null;
                            
total += count;
                            
// publishing the progress....
                            
if (fileLength 0// only if total length is known
                                
publishProgress((int) (total 100 fileLength));
                            
output.write(data0count);
                        }
                    } catch (
Exception e) {
                        return 
e.toString();
                    } 
finally {
                        try {
                            if (
output != null)
                                
output.close();
                            if (
input != null)
                                
input.close();
                        }
                        catch (
IOException ignored) { }

                        if (
connection != null)
                            
connection.disconnect();
                    }
                } 
finally {
                    
wl.release();
                }
                return 
null;
            }
           
            @
Override
            
protected void onPreExecute() {
                
super.onPreExecute();
                
mProgressDialog.show();
            }

            @
Override
            
protected void onProgressUpdate(Integer... progress) {
                
super.onProgressUpdate(progress);
                
// if we get here, length is known, now set indeterminate to false
                
mProgressDialog.setIndeterminate(false);
                
mProgressDialog.setMax(100);
                
mProgressDialog.setProgress(progress[0]);
            }

            @
Override
            
protected void onPostExecute(String result) {
                
mProgressDialog.dismiss();
                if (
result != null)
                    
Toast.makeText(context,"Download error: "+resultToast.LENGTH_LONG).show();
                else
                    
Toast.makeText(context,"Download completed "Toast.LENGTH_SHORT).show();
            }
           
        }
  } 

2- فایل یا همون اکتیویتی Main_JirjirakPage.java که وظیفه ی اجرای فایل دانلودی رو بر عهده داره.(اینجا ار raw میخونه ولی من میخوام از همون جایی که دانلود و ذخیره شده بخونه) :

کد پی‌اچ‌پی:
public class Main_JirjirakPage extends Activity {
    private 
MediaPlayer mediaPlayer;
    public 
TextView songNameduration;
    private 
double timeElapsed 0finalTime 0;
    private 
int forwardTime 2000backwardTime 2000;
    private 
Handler durationHandler = new Handler();
    private 
SeekBar seekbar;
    

    protected 
void onCreate(Bundle savedInstanceState) {
        
super.onCreate(savedInstanceState);
        
        
//set the layout of the Activity
        
setContentView(R.layout.main_jirjirakpage);

        
//initialize views
        
initializeViews();
    
    }
    public 
void initializeViews(){
        
songName = (TextViewfindViewById(R.id.songName);
        
mediaPlayer MediaPlayer.create(this,R.raw.jirjirak);
        
finalTime mediaPlayer.getDuration();
        
duration = (TextViewfindViewById(R.id.songDuration);
        
seekbar = (SeekBarfindViewById(R.id.seekBar);
        
songName.setText("Sample_Song.mp3");
        
seekbar.setMax((int) finalTime);
        
seekbar.setClickable(false);
    }

    
    
// play mp3 song
    
public void play(View view) {
        try {
    
            
mediaPlayer.setDataSource("data/mine/jirjirak.mp3");
        } catch (
IllegalArgumentException e) {
            
// TODO Auto-generated catch block
            
e.printStackTrace();
        } catch (
SecurityException e) {
            
// TODO Auto-generated catch block
            
e.printStackTrace();
        } catch (
IllegalStateException e) {
            
// TODO Auto-generated catch block
            
e.printStackTrace();
        } catch (
IOException e) {
            
// TODO Auto-generated catch block
            
e.printStackTrace();
        }
        
mediaPlayer.start();
        
timeElapsed mediaPlayer.getCurrentPosition();
        
seekbar.setProgress((int) timeElapsed);
        
durationHandler.postDelayed(updateSeekBarTime100);
    }

    
//handler to change seekBarTime
    
private Runnable updateSeekBarTime = new Runnable() {
        public 
void run() {
            
//get current position
            
timeElapsed mediaPlayer.getCurrentPosition();
            
//set seekbar progress
            
seekbar.setProgress((int) timeElapsed);
            
//set time remaing
            
double timeRemaining finalTime timeElapsed;
        
        
            
//repeat yourself that again in 100 miliseconds
            
durationHandler.postDelayed(this100);
        }
    };

    
// pause mp3 song
    
public void pause(View view) {
        
mediaPlayer.pause();
    }

    
// go forward at forwardTime seconds
    
public void forward(View view) {
        
//check if we can go forward at forwardTime seconds before song endes
        
if ((timeElapsed forwardTime) <= finalTime) {
            
timeElapsed timeElapsed forwardTime;

            
//seek to the exact second of the track
            
mediaPlayer.seekTo((int) timeElapsed);
        }
    }

    
// go backwards at backwardTime seconds
    
public void rewind(View view) {
        
//check if we can go back at backwardTime seconds after song starts
        
if ((timeElapsed backwardTime) > 0) {
            
timeElapsed timeElapsed backwardTime;
            
            
//seek to the exact second of the track
            
mediaPlayer.seekTo((int) timeElapsed);
        }
    }




اکتیویتی Main.java که صفح ه ی اولیه که تو اجرا نشون داده میشه :

کد پی‌اچ‌پی:
public class Main extends ActionBarActivity {

    
    private 
ImageView imageView1_main_jirjirak;
    private 
ImageView imageView1_main_moosh;
    private 
ImageView imageView1_main_andaze_donya;
    @
Override
    
protected void onCreate(Bundle savedInstanceState) {
        
super.onCreate(savedInstanceState);
        
setContentView(R.layout.main);
        
        
imageView1_main_jirjirak=(ImageViewfindViewById(R.id.imageView1_main_jirjirak);
        
imageView1_main_moosh=(ImageViewfindViewById(R.id.imageView1_main_moosh);
        
imageView1_main_andaze_donya=(ImageViewfindViewById(R.id.imageView1_main_andaze_donya);
        
        
imageView1_main_jirjirak.setOnClickListener(new OnClickListener() {
            public 
void onClick(View arg0) {
                
                
File root android.os.Environment.getExternalStorageDirectory();
                
File file2=new File(root.getAbsolutePath() + "/jirjirak.mp3");
                
                if (
file2.exists()){
                     
Intent jirjirak=new Intent(Main.this,com.jirjirak.com.Main_JirjirakPage.class) ;
                     
startActivity(jirjirak);
                                          }
                else
                    {
                    
Intent mydownload=new Intent(Main.this,com.jirjirak.com.Main_DownloadJirjirak.class) ;
                     
startActivity(mydownload);
                     
                    }
            }
        }); 
پاسخ

خطای sd card (در برنامه نویسی اندروید)

#11
منم مشکل این آقا رو تو برنامم داشتم که بعد از کلی تست کردن متوجه شدم ب جای sdcard باید از mnt تو ذخیره فایل استفاده کنم تا رو همه گوشیا اندرویید بخصوص سونی جواب بده
پاسخ
 سپاس شده توسط admin


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان

آخرین کلیدهای غیررایگان

شما هم می توانید کلیدهای غیررایگان منتشر کنید (بیشتر بدانید)