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


رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
دانلود فایل mp3 و قرار دادن برای رینگتون (در برنامه نویسی اندروید)

دانلود فایل mp3 و قرار دادن برای رینگتون (در برنامه نویسی اندروید)

#1
سلام
وقت بخیر
من فایل mp3 رو از روی سرور با کدهای زیر از سرور به روی SD کارت ذخیره می کنم :

کد پی‌اچ‌پی:
private void startDownload() {
        
String url music;
        new 
DownloadFileAsync().execute(url);
    }
    @
Override
    
protected Dialog onCreateDialog(int id) {
        switch (
id) {
        case 
DIALOG_DOWNLOAD_PROGRESS:
            
mProgressDialog = new ProgressDialog(this);
            
mProgressDialog.setMessage("Downloading file..");
            
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
            
mProgressDialog.setCancelable(false);
            
mProgressDialog.show();
            return 
mProgressDialog;
        default:
            return 
null;
        }
    }

class 
DownloadFileAsync extends AsyncTask<StringStringString> {

    @
Override
    
protected void onPreExecute() {
        
super.onPreExecute();
        
showDialog(DIALOG_DOWNLOAD_PROGRESS);
    }
    @
Override
    
protected String doInBackground(String... aurl) {
        
int count;

    try {
    
URL url = new URL(aurl[0]);
    
URLConnection conexion url.openConnection();
    
conexion.connect();
    
int lenghtOfFile conexion.getContentLength();
    
Log.d("ANDRO_ASYNC""Lenght of file: " lenghtOfFile);

    
InputStream input = new BufferedInputStream(url.openStream());
    
File sdCard Environment.getExternalStorageDirectory();
    
File dir = new File (sdCard.getAbsolutePath() + "/myfoldername/dir3");
    
dir.mkdirs();
    
File file = new File(dirmyringtonename ".mp3");
    
FileOutputStream output = new FileOutputStream(file);
    
byte data = new byte[1024];
    
long total 0;
        while ((
count input.read(data)) != -1) {
            
total += count;
            
publishProgress(""+(int)((total*100)/lenghtOfFile));
            
output.write(data0count);
        }
        
output.flush();
        
output.close();
        
input.close();
    } catch (
Exception e) {}
    return 
null;
    }
    protected 
void onProgressUpdate(String... progress) {
         
Log.d("ANDRO_ASYNC",progress[0]);
         
mProgressDialog.setProgress(Integer.parseInt(progress[0]));
    }
    @
Override
    
protected void onPostExecute(String unused) {
        
dismissDialog(DIALOG_DOWNLOAD_PROGRESS);
    }


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

کد پی‌اچ‌پی:
private void setrington() {
            
String path getFilesDir()+"/sdcard/myfoldername/dir3/";
            
File k = new File(pathmyringtonename ".mp3"); // path is a file to /sdcard/media/ringtone
            
ContentValues values = new ContentValues();
            
values.put(MediaStore.MediaColumns.DATAk.getAbsolutePath());
            
values.put(MediaStore.MediaColumns.TITLE"My Song title");
            
values.put(MediaStore.MediaColumns.SIZE215454);
            
values.put(MediaStore.MediaColumns.MIME_TYPE"audio/mp3");
            
values.put(MediaStore.Audio.Media.ARTIST"Madonna");
            
values.put(MediaStore.Audio.Media.DURATION230);
            
values.put(MediaStore.Audio.Media.IS_RINGTONEtrue);
            
values.put(MediaStore.Audio.Media.IS_NOTIFICATIONfalse);
            
values.put(MediaStore.Audio.Media.IS_ALARMfalse);
            
values.put(MediaStore.Audio.Media.IS_MUSICfalse);
            
Uri uri MediaStore.Audio.Media.getContentUriForPath(k.getAbsolutePath());
Uri newUri Etelaat.this.getContentResolver().insert(urivalues);
RingtoneManager.setActualDefaultRingtoneUri(getApplicationContext(),RingtoneManager.TYPE_RINGTONE,newUri);

        } 

دانلود کامل کار میکنه اما فایل رو روی حافظه گوشی ذخیره می کنه نه روی SD کارت و همینطور کد های ست کردن رینگتون هم کار نمیکنه و من این رو در لاگ کت میبینم :

کد پی‌اچ‌پی:
05-19 01:26:23.841V/Provider/Settings(3485):  from settings cache name sound_effects_enabled value 0
05
-19 01:26:23.848D/ActivityThread(3485): hoder:android.app.IActivityManager$ContentProviderHolder@42ce86c0,provider,holder.Provider:android.content.ContentProviderProxy@42ce9098
05
-19 01:26:23.979D/Provider/Settings(3485): put string name ringtone value content://media/internal/audio/media/142 userHandle = 0
05-19 01:26:24.031I/RingtoneManager(3485): Set actual default ringtone uricontent://media/internal/audio/media/142 

من این کدها رو هم استفاده کردم در ست کردن رینگتون :

کد پی‌اچ‌پی:
File sdCard Environment.getExternalStorageDirectory();
File dir = new File (sdCard.getAbsolutePath() + "/myfoldername/dir3");
dir.mkdirs();
File file = new File(dirmyringtonename ".mp3"); 

که این کد هم کار نمیکنه و این رو در لاگ کت میبینم :

کد پی‌اچ‌پی:
05-19 01:36:22.478V/Provider/Settings(7367):  from settings cache name sound_effects_enabled value 0
05
-19 01:36:22.494D/ActivityThread(7367): hoder:android.app.IActivityManager$ContentProviderHolder@42cce4c8,provider,holder.Provider:android.content.ContentProviderProxy@42cceea0
05
-19 01:36:22.606D/Provider/Settings(7367): put string name ringtone value null userHandle 0
05
-19 01:36:22.631I/RingtoneManager(7367): Set actual default ringtone urinull 
پاسخ

دانلود فایل mp3 و قرار دادن برای رینگتون (در برنامه نویسی اندروید)

#2
سلام.
ابتدا کد مربوط به مسیر  ذخیره سازی فایل را بررسی می کنیم :

کد پی‌اچ‌پی:
File sdCard Environment.getExternalStorageDirectory();
File dir = new File (sdCard.getAbsolutePath() + "/myfoldername/dir3"); 

متغیر sdCard که ساخته اید، برابر آدرس پوشه اصلی حافظه خارجی (External Storage) از حافظه گوشی می باشد (که به آن نیز sd card گفته می شود) (در مورد اسم sd card در ادامه صحبت می کنم). این نوع کدنویسی برای هنگامی است که بخواهیم در حافظه خارجی (External Storage) از حافظه گوشی، فایلی را نوشته و یا بخوانیم (نه در حافظه ای که به گوشی اضافه شده).
و کدهای مربوط به تنظیم Ringtone :

کد پی‌اچ‌پی:
String path getFilesDir()+"/sdcard/myfoldername/dir3/";
File k = new File(pathmyringtonename ".mp3"); // path is a file to /sdcard/media/ringtone 

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

-------------------------------------

در مورد لغات حافظه گوشی، حافظه خارجی (External Storage)، حافظه داخلی (Internal Storage) و sd card ، گاهی آنها را با هم اشتباه می گیریم که بد نیست در موردش کمی صحبت کنم.
از نگاه برنامه نویسی اندروید (یا در واقع نصب یک برنامه روی گوشی اندروید)، حافظه گوشی (که در هنگام خرید گوشی، روی خود آن است و قطعه اضافی نیست)، به دو قسمت حافظه خارجی (External Storage) و حافظه داخلی (Internal Storage) تقسیم می شود (منظورم از نظر اختصاص دادن حافظه است، چون در برخی گوشی ها، این دو از نظر سخت افزاری ممکن است جدا باشند و در برخی، از نظر سخت افزاری از یک قطعه بهره ببرند). که هر دوی آنها را همه گوشی ها دارند، یعنی همه یک حافظه خارجی (External Storage) دارند که قابل برداشتن (removeable) نیست (یعنی جدا از حافظه هایی که removeable هستند، شاید بهتر باشد آنهایی که removeable هستند را removeable external storage بنامیم که اشتباهی رخ ندهد). حافظه داخلی (Internal Storage) مختص برنامه اندروید نصب شده خواهد بود (یعنی سایر برنامه های اندروید و یا کاربر، نمی توانند به اطلاعات موجود در آن دسترسی داشته باشند، مگر با روش های هک کردن) و حافظه خارجی (External Storage)، بخش دیگر و قابل دسترسی توسط کاربر و سایر برنامه ها می باشد. دقت شود که این موارد، جدا از پوشه هایی مثل raw و assets می باشد که در برنامه اندروید قرار می دهیم (این پوشه ها درون فایل APK قرار می گیرند).
در مورد لغت sd card ، به حافظه گوشی و یا حافظه خارجی (External Storage) نیز  sd card گفته می شود (به همین دلیل گاهی در آدرس دهی، لغت sdcard را می بینید)، بنابراین بهتر است برای حافظه هایی که به گوشی اضافه می کنیم (جدا از حافظه اصلی که توسط کارخانه در آن قرار داده شده)، عبارت removeable sd card را به کار ببریم (منظورم از نظر نام آنها است، نه در آدرس دهی).
اگر قصد دارید فایل در  removeable sd card ذخیره شود، بنده تاکنون کدنویسی آن را اجرا نکرده ام، بنابراین به سایت های انگلیسی زبان مراجعه کنید، اما حتما کد چک کردن اینکه گوشی  removeable sd card دارد یا خیر را بنویسید که در صورت عدم داشتن  removeable sd card ، فایل در حافظه خارجی (External Storage) ذخیره شود.

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


پرش به انجمن:


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