ورود

View Full Version : مشکل هنگام پخش موزیک در اکتیویتی



erfane.r
سه شنبه 06 فروردین 1392, 18:04 عصر
سلام دوستان.وقتتون بخیر
من 2 تا اکتیوی دارم که اکیتیوتی اولم اسمش SoundActivityهستش و کد زیر رو توش نوشتم.اکتیویتی دومم هم اسمش Sound هستش که از هنگام ساخت تغییری توش ندادم.وهم چنین توی فایل های دیگه هم تغییری ایجاد نکردم.مشکلم اینجاست که نمی دونم فایل10.mp3 کجا بریزم؟وهم چنین کد زیر اصلا موزیک پخش نمی کنه و فقط button شکلاش عوض می شه.
ممنون دوستان
package com.sound;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import android.view.View.OnClickListener;

public class SoundActivity extends Activity {
Intent serviceIntent;
private Button buttonPlayStop;
private boolean boolMusicPlaying=false;
String strAudioLink="10.mp3";
/** Called when the activity is first created. */
// @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

try{
serviceIntent =new Intent(this,second.class);
initViews();
setListeners();
}catch(Exception e){
e.printStackTrace();
Toast.makeText(getApplicationContext(), e.getClass().getName()+" "+e.getMessage(), Toast.LENGTH_LONG).show();

}
}


private void initViews(){
buttonPlayStop= (Button) findViewById(R.id.button1);
buttonPlayStop.setBackgroundResource(R.drawable.pl ay);
}

private void setListeners(){
buttonPlayStop.setOnClickListener(new OnClickListener(){
public void onClick(View v){
buttonPlayStopClick();
}
});
}

private void buttonPlayStopClick(){
if(!boolMusicPlaying){
buttonPlayStop.setBackgroundResource(R.drawable.pl ay);
playAudio();
boolMusicPlaying=true;
}
else{
if(boolMusicPlaying){
buttonPlayStop.setBackgroundResource(R.drawable.pa use);
stopSecond();
boolMusicPlaying=false;
}

}
}


private void stopSecond() {

try{
stopService(serviceIntent);
}catch(Exception e){
e.printStackTrace();
Toast.makeText(getApplicationContext(), e.getClass().getName()+" "+e.getMessage(), Toast.LENGTH_LONG).show();


}
boolMusicPlaying=false;
}


private void playAudio() {
serviceIntent.putExtra("sentAudioLinker", strAudioLink);
try{
startService(serviceIntent);
}catch(Exception e){
e.printStackTrace();
Toast.makeText(getApplicationContext(), e.getClass().getName()+" "+e.getMessage(), Toast.LENGTH_LONG).show();


}


}
}

shahin bahari
سه شنبه 06 فروردین 1392, 22:04 عصر
فایل mp3 اگر قرار هست تو سورس برنامه باشه که میتونید توی فولدر res یه فولدر به اسم raw بسازید و توی اون بزارید. تو این صورت این آهنگ دیگه یه id داره که با اون میشه آدرس داد. تو فولدر asset هم میشه و باید برای خوندنش از asset manager استفاده کنید و یکم کار داره.
اگر هم فایلتون تو مموری هم باشه که باز آدرس مشخصی داره!
برای پخش هم از کلاس MediaPlayer استفاده کنید. آدرس یا id رو بهش میدید, prepare میکنید و در آخر play . این تابع ها همه تو همین کلاس هست. خیلی ساده میشه باهاش کار کرد واسه همین مثال نمیزنم دیگه. اگر تست کردی و مشکلی بود بگو تا کد نمونه بزارم.

erfane.r
چهارشنبه 07 فروردین 1392, 02:42 صبح
با توجه به پاسخ شما,اگر از یک اکتیویتی به اکتیویتی دیگه برم بازم موزیک پخش می شه؟

shahin bahari
چهارشنبه 07 فروردین 1392, 16:32 عصر
شما کلا از برنامه بیا بیرون,بازهم تا زمانی که موزیک به انتها نرسیده پخش میشه.البته این نکته رو هم فراموش نکنید تو این شرایط با بسته شدن اکتیویتی شی های درون اون هم پاک میشه دیگه دسترسی به اون برای کنترل ندارید.

erfane.r
پنج شنبه 08 فروردین 1392, 00:29 صبح
منظورتون شبیه ساز هستش؟این کار رو انجام دادم یعنی شبیه ساز رو بستم,هم زمان هم موسیقی قطع شد.
الان یه مشکل دیگه هم دارم.با توجه به کد زیر اصلا موزیک puase نمی شه و هم چنین هر بار که دکمه رو کلیک می کنم,موزیک از اول دوباره پخش می شه و به تعدادی که دکمه رو فشار دادم موزیک روی هم می یفته!چه تغییری باید توش اعمال کنم؟
boolean boolMusicPlaying=false;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

Button b= (Button) findViewById(R.id.button1);
b.setOnClickListener(new OnClickListener(){
// @Override

public void onClick(View v){
MediaPlayer mp=MediaPlayer.create(Sound5Activity.this,R.raw.dj );


if(!boolMusicPlaying){

mp.start();
boolMusicPlaying=true;
}
else{
if(boolMusicPlaying){
mp.pause();
boolMusicPlaying=true;

}


}
}


});

shahin bahari
پنج شنبه 08 فروردین 1392, 01:59 صبح
پیشنهاد میکنم قبل از درگیر شدن با این موارد یکم در مورد life cycle و برنامه نویسی جاوا مطالعه کنید. با این کد بدیهی هست که جواب نمیگیرید.شما با هربار کلیک بر روی دکمه یک مدیا پلیر جدید میسازید و اون رو مقدار دهی میکنید.اگر 10 بار دکمه رو بزنید 10 تا مدیا پلیر براتون میسازه... از اون جایی هم که بعد از تموم شدن بخش callback دکمه اون مدیا پلیر از بین میره دیگه توانایی pause کردنش رو هم ندارید چون اون مدیا پلیری که ساخته بودید از بین رفته و شما با یه مدیاپلیر جدید روبرو هستید.تو این حالت باید موزیک تا آخر پخش بشه تا بعد خودش رو terminate کنه.(شما کنترلری که برای کنترلش داشتید رو از بین بردید و دسترسی ندارید)
راستی اگر اون متغییر بولین هم که تعریف کردید رو جای دیگه دوباره مقدارش رو فالس نکنید موزیک جدیدی پلی نمیشه مگر اینکه از این اکتیویتی خارج بشید و دوباره بیاید.شرطی که گزاشتید مشکل داره.
شما توی روتین onCreate یه مدیا پلیر تعریف کنید و مقدار دهی کنید. بعد توی رویداد دکمه وضعیت اون رو تغییر بدید.نیازی هم به ساخت متغییری برای چک کردن درحال پخش بودن نیست.از تابع isPlaying() استفاده کنید.
منظور از بستن هم بستن برنامه هست نه کل شبیه ساز.