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

مشکل در پخش فایل صوتی بصورت ناقص ! از SD_CARD

Criss  9 سال پیش  9 سال پیش
+3 0

سلام دوستان

جدیدا با یک MediaPLayer ساده کلی مشکل پیدا کردم !

تمام نت رو هم گشتم اما مشکل حل نشد <

مدیا پلایر دقیقا با Warning زیر دیگه ادامه فایل رو پخش نمیکنه < و هر بار تا قسمتی از فایل رو پخش میکنه و تا نصفه قطع میشه !

 MediaPlayer finalized without being released

این هم سورس :

  MediaPlayer player = new MediaPlayer();
Uri uri = Uri.parse(G.DIR_APP + "/" + item.id + ".wd4"); // برای اینکه فایل در مدیا پلایر گوشی شناخته نشود تغییر پسوند دادم
player = MediaPlayer.create(G.context, uri);
player.setAudioStreamType(AudioManager.STREAM_MUSIC);

try {
player.prepare();
}
catch (IllegalStateException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}


final MediaPlayer finalPlayer = player;
player.setOnPreparedListener(new OnPreparedListener() {

@Override
public void onPrepared(MediaPlayer arg0) {
finalPlayer.start();
}
});
player.setOnCompletionListener(new OnCompletionListener() {

@Override
public void onCompletion(MediaPlayer arg0) {
finalPlayer.release();
}
});
0 0
دوستان کسی نظری نداره ؟ چرا این مشکل وجود داره ؟ هرچی سرچ میکنم همه دقیقا به همین ترتیب فایل از SD_CARD میگیرن _ آموزش استاد هم از روی SD_CARD به همین شکل بود ! (9 سال پیش)
+1 0
برای اینکه فایلتون در مدیا پیلر شناسخته نشه یک فایل خالی با پسوند .nomedia بسازید . (9 سال پیش)
0 0
من فایل رو درون Dawable میزارم < بدون مشکل اجرا میشه < پس چرا از روی SD_CARD اجرا نمیشه ؟ میتونم اون رو Stream کنم روی حافظه ؟ و از روی Steram بخونم ؟ (9 سال پیش)
+1 0
نه فرقی نمیکنه ، از این روش برای دسترسی به فایل استفاده کنید ببنید فرقی میکنه : mediaPlayer.setDataSource(this, soundUri); (9 سال پیش)
0 0
این هم فرقی نمیکنه و دقیقا مثل URI عمل میکنه < فعلا باید سورسی که پایین گذاشتید رو تست کنم (9 سال پیش)
 برای این سوال 6 پاسخ وجود دارد.
پاسخ به سوال 
کاشی زاده  9 سال پیش
+2 0

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

String audioPath = G.PATH_SD_CARD+ audioFilename +".mp3";
FileInputStream fis =newFileInputStream(audioPath);
FileDescriptor fd = fis.getFD();

MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setDataSource(fd);
mediaPlayer.prepare();
mediaPlayer.start();
0 0
همه ی سورس ها رو در یک پروژه جدا گانه تست کردم < فقط این کد جواب داد < که متاسفانه در پروژه ی اصلی که قرار میدم < با همون Warning متوقف میشه ! < مشکل از تداخل کدنویسی شاید باشه !! چطور میتونم این مشکل رو پیدا کنم ؟ میتونه مشکل از ThreadMain باشه ؟ (9 سال پیش)
+1 0
یک پروژه جدید و خالی باز کنید و فقط کد پخش رو داخل بنویسید تا جایی که امکان داره منابع باگ رو کم کنید و ببنید درست کار میکنه یا نه (9 سال پیش)
0 0
دقیقا همین کار رو کردم و یک پروژه جدید ساختم (جداگانه) < که بخوبی کار میکنه < ولی در پروژه اصلی این اتفاق نمیافته (9 سال پیش)
+1 0
خب حالا تیکه تیکه کد های پروژه اصلی رو که استفاده کردی ببر تو پروژه جدید تا به باگ برسی. (9 سال پیش)
پاسخ به سوال 
Criss  9 سال پیش
0 0

صدا زدن کد های بالا در یک Item از ListView اتفاق میافته < که این ListView در یک SlidingVIew (اسلایدینگ استاد) قرار داده < از اونجایی که شاید مشکلی در اون قسمت وجود داشته باشه  من یک Button در ActivityMain هم گذاشتم < و اونجا هم تست کردم < که هیچ فرقی نکرد کلا هرجای پروژه صدا زده بشه به این مشکل بر میخوره !

فکر میکنم اگر در یک کلاس Helper هم اینکار انجام بشه باز هم همین مشکل وجود داشته باشه !

پاسخ به سوال 
Criss  9 سال پیش
0 0

تمام خطوط برنامه رو Comment کردم < از کل برنامه فقط Oncreate مونده + یک Button <

و برای Button صدا زدم <

 Helper.run();

هر چی روی Button کلیک میکنم < برنامه بخوبی کار میکنه < و صدا با موفقیت تا آخر پخش میشه <

برای تست خط بالا رو گذاشتم توی onCreate < و باگ برنامه پیدا شد < ! (الان میخوام کد های Helper رو پاک کنم و در Button بنویسم )

دلیل باگ چی میتونه باشه ؟ چرا از توی onCreate قابلیت اجرا شدن نداره ؟ !!!

یک کلاس Helper ساختم با کد های زیر <

 package //

import java.io.File;
import java.io.FileDescriptor;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import android.media.MediaPlayer;
import android.os.Environment;


public class Helper {

public static void run() {

String file = Environment.getExternalStorageDirectory().getAbsolutePath() + "/folder/file.mp3";
final MediaPlayer new_mediaPlayer = new MediaPlayer();

if ((new File(file).exists())) {
FileInputStream fis = null;
try {
fis = new FileInputStream(file);
}
catch (FileNotFoundException e) {
e.printStackTrace();
}
FileDescriptor fd = null;
try {
fd = fis.getFD();
}
catch (IOException e) {
e.printStackTrace();
}

try {
new_mediaPlayer.setDataSource(fd);
new_mediaPlayer.prepare();
}
catch (IllegalArgumentException e) {
e.printStackTrace();
}
catch (IllegalStateException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
new_mediaPlayer.start();
}
}
}

 

0 0
خطی که مستقیما در onCreate جواب نمیداد < در Handler.postDelay جواب میده !!! (9 سال پیش)
0 0
خطی که مستقیما در onCreate جواب نمیداد < در HANDLER.post هم جواب نـــمیده (9 سال پیش)
0 0
توی onResume هم این اتفاق میافته و باعث میشه هرچی صدا از طریق کلیک شدن در حال اجرا هست < بسته بشه و از بین بره < (دلیل خطا هم Warning هست) MediaPlayer finalized without being released (9 سال پیش)
+1 0
لینک (9 سال پیش)
0 0
دقیقا دیروز زیر همین لینک پست گذاشتم < با اسم < Criss (9 سال پیش)
پاسخ به سوال 
Criss  9 سال پیش
0 0

مشکل از متد زیر بود <

این متد رو نوشتم برای اینکه یک ImageVIew بصورت sliding داشته باشم <

  private void SlideShow() {
Thread slideThread = new Thread(new Runnable() {

@Override
public void run() {
while (true) {
countSliding++;
if (countSliding >= 31) {
countSliding = 1;
}
final int res = getResources().getIdentifier("com.freestyler.MYAPP.criss:drawable/img" + countSliding, null, null);
try {
Thread.sleep(3500);
imgSlideShow.post(new Runnable() {

@Override
public void run() {
imgSlideShow.setImageResource(res);
Animation slideAnimation = AnimationUtils.loadAnimation(G.context, R.anim.slide_right);
imgSlideShow.setAnimation(slideAnimation);
}
});
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});
//slideThread.start();
}

حالا چطور میتونم < این اسلادینگ شدن رو همچنان در حال اجرا نگهدارم ؟ < در واقع استفاده از دستور While(true) اینجا اشتباه هست ! <

 

0 0
دقیقا مشکل از < imgSlideShow.post(new Runnable() { < هست ! چرا ؟ (9 سال پیش)
پاسخ به سوال 
Criss  9 سال پیش
0 0

عجب بدبختی گیر افتادیما <

این مشکل از Post کردن < نبود<

مشکل دقیقا زمانی هست < که تصویر جدید روی ImgSliding ست میشه < صدای موزیک پلیر قطع میشه !

  imgSlideShow.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
countSliding++;
if (countSliding >= 31) {
countSliding = 1;
}
final int res = getResources().getIdentifier("com.freestyler.MYAPP.criss:drawable/img" + countSliding, null, null);

imgSlideShow.setImageResource(res);
//Animation slideAnimation = AnimationUtils.loadAnimation(G.context, R.anim.slide_right);
//imgSlideShow.setAnimation(slideAnimation);
}
});

 

0 0
دقیقا زمانی که imgSlideShow.setImageResource(res) انجام میشه صدا قطع میشه !!! (یا مسیبت !) چرا اینجوریه ؟ (9 سال پیش)
0 0
این اسلاید شویی که استفاده کردید مربوطه به چه لایبری هست ؟ خودتون نوشتید یا از لایبری استفاده کردید ؟ (9 سال پیش)
0 0
کل اسلاید شو < همین کدی هست که در بالا نوشتم < تعداد 30 عکس رو به ترتیب از فولدر drawable میگیرم و با انیمیشن در یک ImageView با تاخیر 3500 میلی ثانیه نشون میده < خودم نوشتم و از لایبری استفاده نکردم < الان که دارم چک میکنم هر عکسی که از drawable روی ImageVIew ست میشه < باعث قطع شدن صدا میشه < دلیل قطع شدن صدا بصورت نصفه هم همین تاخیر زمانی 3500 میلی ثانیه در ست کردن عکس ها بوده (9 سال پیش)
پاسخ به سوال 
Criss  9 سال پیش
0 0

تعداد 30 عکس بصورت imgX در فولدر Drawable وجود داره <

با استفاده از کد زیر گرفته میشه < و در ImageView قرار میگیره

 countSliding++;
if(countSliding >=31){
countSliding =1;
}
 finalint* res = getResources().getIdentifier("com.freestyler.MYAPP.criss:drawable/img"+ countSliding,null,null);

imgSlideShow.setImageResource(res);

من با سورس زیر چک کردم < بصورت کاملا ساده وقتی عکسی روی ImageVIew ست میشه باعث قطع شدن صدا میشه !

از قبل با کلیک شدن صدا رو اجرا میکنم و کد زیر رو هم بعد اجرای صدا با کلیک شدن اجرا میکنم

Warning : MediaPlayer finalized without being released میده و صدا قطع میشه <

  Random r = new Random();
if (r.nextBoolean()) {
imgSlideShow.setImageResource(R.drawable.img1);
} else {
imgSlideShow.setImageResource(R.drawable.img2);
}

 

+1 0
پیلرتون رو در ترد جداگانه فعال کنید تا از هم جدابشن و ببنید حل میشه یا نه (9 سال پیش)
0 0
متوجه منظورتون از "پیلر" نمیشنم ، چی هست ؟ < ولی کدهای متد slidingShow که کدش در بالا هست در یک ترد قرار داره < فعلا برای حل این مشکل < قصد دارم زمانی که قراره صدا اجرا بشه < مقدار درون while رو false کنم اینطوری همزمانی بین اجرای صدا و تغییر اسلادینگ حل میشه < (9 سال پیش)
+1 0
فکر کنم منظور محمد حسین جام پلیر بود ( player ) که یعنی همون Media Player :D (9 سال پیش)
+1 0
فکر کنم منظور محمد حسین جام پلیر بود ( player ) که یعنی همون Media Player :D (9 سال پیش)
0 0
مشکل رو با دوتا while برای متد SlidingShow که متد در بالا کدهاش هست حل شد ، True , False کردم < اگر ممکنه بریم سراغ این سوال < لینک (9 سال پیش)

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