بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

اموزش پخش و توقف موسیقی+لینک دانلود پروژه

مدیریت گفتگو
MEHDI007 11 سال پیش
آخرین تغییر: 9 سال پیش

خوب اموزش ساخت یک برنامه است.سورس کد ها و لینک خود برنامه در زیر تاپیک قرار دارد.با تشکر

اکنون می خواهیم یک برنامه اندروید بسازیم که دارای دو دکمه باشد، یک دکمه برای پخش موسیقی و دیگری برای توقف پخش موسیقی. بنابراین کاربر می تواند کنترل کند که آیا موسیقی پخش بشود یا خیر.

دربرنامهeclipse،ابتدا یک پروژه اندرویدبا نام play music می سازیم .

(نام packageرا برابر com.uncocoder.playmusic.app انتخاب می کنیم. نام activity اصلی را برابر MainActivity انتخاب می کنیم و فایل xml متناظر آن را هم برابر activity_main قرار می دهیم).

ابتدا باید فایل strings.xml از پروژه اندروید را باز کنیم :

کدهای آن، در ابتدا به صورت زیر می باشد :

 <?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">play music</string>
    <string name="action_settings">Settings</string>
    <string name="hello_world">Hello world!</string>

</resources>

ما دو رشته (string) دیگر نیز در آن تعریف می کنیم :

 <?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">play music</string>
    <string name="action_settings">Settings</string>
    <string name="hello_world">Hello world!</string>
    <string name="music_play">پخش موسیقی</string>
    <string name="music_stop">توقف پخش موسیقی</string>

</resources>

این دو رشته، عنوان هایی هستند که بر روی دو دکمه، نمایش داده خواهند شد.

سپس فایل activity_main.xml از پروژه اندروید را باز می کنیم :من از این کد استفاده کردم شما می تونید از عکس یا حتی هر چیزی دوست داشتید استفاده کنید.

کدهای آن را به صورت زیر تغییر می دهیم (تعریف دو دکمه مورد نیازمان) :

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    
      <Button
        android:id="@+id/button1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/music_play" />

    <Button
        android:id="@+id/button2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/button1"
        android:layout_below="@+id/button1"
        android:text="@string/music_stop" />
    
</RelativeLayout>

ظاهر گرافیکی activity_main.xml به صورت زیر خواهد بود.

فایل موسیقی مورد نظرمان، دارای نام مثلا playmusic.mp3 می باشد. یا هر اسمی که دوست داشتید:

یک فولدر با نام raw ، به صورت زیر فولدر برای فولدر res می سازیم و سپس فایل playmusic.mp3 را در آن کپی می کنیم :

اکنون باید کدهای مربوط به نحوه عملکرد دو دکمه را درون فایل MainActivity.java بنویسیم. بنابراین فایل MainActivity.java را باز می کنیم :

فایل MainActivity.java ، در ابتدا دارای کدهای زیر می باشد :

 package com.uncocoder.playmusic.app;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		
		
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}
}

کدهای آن را به صورت زیر تغییر می دهیم :

 package com.uncocoder.playmusic.app;

import android.media.MediaPlayer;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {

    public MediaPlayer player;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		 Button b_1 = (Button) findViewById(R.id.button1);
         b_1.setOnClickListener(new OnClickListener() {
                                   
              @Override
              public void onClick(View v) {
                  player = MediaPlayer.create(MainActivity.this, R.raw.playmusic); 
                  player.setLooping(true); // Set looping 
                  player.setVolume(100,100); 
                  player.start();
              }
         });
         
         Button b_2 = (Button) findViewById(R.id.button2);
         b_2.setOnClickListener(new OnClickListener() {
                                   
              @Override
              public void onClick(View v) {
                  player.stop();
              }
         });
 }	
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}

و می تونید سورس پروژه برنامه رو دانلود کنید .

سورس پروژه در اخرین پست

نظرات

MEHDI007 11 سال پیش
دوستان ببخشید لینک دانلود مشکل داشت.اصلاح شد با تشکر:)
Criss 11 سال پیش
چرا من توی اینترنت سرچ میکنم < اکثرا برای اجرای فایل صوتی از "R.raw" و یا از Asset , ِdrwable استفاده میکنند ؟ و کمتر کی سورسی میزاری از SD_CARD < متاسافانه اجرا از SD_CARD ارور های غیر منطقی داره ! < اگر پروژه ایی برای اجرا از SD_CARD دارید « ممنون میشم راهنمایی کنید
MEHDI007 11 سال پیش
برای چی اجرا از SD_CARD من فکر کنم مشکل زیاد به وجود بیاره ولی دقیقا نمیدونم تا حالا استفاده نکردم:ا
Criss 11 سال پیش
برای اینکه در ابتدا برنامه ی ما حجم کمی داشته باشه و راحت دانلود بشه < و بعدا منابع رو دانلود کنیم و از اونجا پخش کنیم < فرض کنید < هر روز منبع جدید توی برنامه قرار بگیره < برای دانلود < مشکلم توی این تاپیک بود < کم کم داره رفع میشه < لینک

پاسخ‌ها 8

MEHDI007 11 سال پیش

دوستان ببخشید نمی دونم چه مشکلی داشت اما لینک کار نمی کرد مجبور شدم این جا بزارم

اپلود

picofile


 

شما با این کد می تونید چک کنید که ایا اهنگ پخش می شود یا نه و می تونی بگی که اگه اهنگ پخش میشد فلان کار انجام بده و اگه پخش نمی شود هم فلان کارو خیلی ساده:)

و بعد تعریفش می کنیم:

  player = MediaPlayer.create(MainActivity.this, R.raw.m);//به جای mاسم اهنگ بزارید 

 بعد یک باتن میزارید و id بهش میدید و انکلیک براش می نویسید خیلی ساده

و بعد با این کد چک کنید:

//اگر اهنگ پخش نمی شود این کار یا هر کاری رو انجام بده
if(player.isPlaying() == false){
player.setLooping(true); // Set looping
player.setVolume(50,50);
player.start();

}else if(player.isPlaying() == true);{}//اگر اهنگ پخش نمی شود این کار یا هر کاری رو انجام بده

و با توجه به نیازتون هر کاری دوست دارید انجام بدید:)

نظرات

ATRAS 11 سال پیش
مهدی جان ممنون بابت آموزشت.یه نکته.شما میتونستین با یک شرط هر دو دکمرو تبدیل کنین به یک دکمه اینجوری هم فضای کمتری اشغال میشد هم از نظر بسری کار قشنگ تری میشد.بعد هم تکس یا عکس هر دکمه بنا به موقعیتش رو دکمه می افتاد.
MEHDI007 11 سال پیش
بله دوست عزیز می دونم کاری های زیادی از نظر گرافیکی می تونستم انجام بدم:)اگه دلت می خواد برات شبیه یک پلیر حرفه ای کنم.نه دوست عزیز این فقط برای اموزش نه...دیگه.ولی اگه بخوای خودت هم می تونه توی 5دقیقه یک تعغیرات کلی به وجود بیاری:)من فقط اینو از جنبه ی اموزشی درست کردم:)موفق باشی
developer1981 11 سال پیش
ATRAS جان میشه کد اینی که میگی بزاری ، یعنی اجرا و توقف آهنگ با یک دکمه
h_uk2009 11 سال پیش
دستون درد نکنه ازین کارا بیشتر بکنین
MEHDI007 11 سال پیش
دوست عزیز با همون کد های داخل برنامه هم می تونید این کارو انجام بدید.اگه نیاز دارید پروژه رو تعغیر بدم برتون بفرستم:)
developer1981 11 سال پیش
ممنون میشم همین کار رو برای یک دکمه انجام بدید ، یعنی play و Stop شدن آهنگ فقط با یک دکمه.
MEHDI007 11 سال پیش
همین جواب مطالعه کنید فکر کنم کافیه:)کد رو گذاشتم
ali 2011 11 سال پیش

سلام من کد رو دانلود کردم و برنامه درست کار میکنه ولی تنها وقتی که برای بار اول روی دکمه پخش کلیک کنید اگر اول که وارد برنامه میشید روی دکمه ی توقف کلیک کنید فورس کلوز میده! یه امتحان بکیند؟!

با تشکر!

نظرات

atf 11 سال پیش
یه راه ساده داره اونم اینکه دستور بدی برای اولین بار دکمه توقف مخالف null باشه البته من هنوز کد ها رو ندیدم
MEHDI007 11 سال پیش
با یک عبارت شرطی ساده میشه دوتا دکمه رو یکی کرد و دیگه نیاز به این هم نداره:)
Amir 11 سال پیش
مرسی از آموزشت ولی من یک آهنگ از اینترنت دانلود کردم توی Sdcard حالا میخوام این آهنگ رو از اونجا پلی کنم چکار کنم؟؟؟
Amir 11 سال پیش

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

  Uri uri = Uri.parse(G.DIR_TEMP + "/bavarkonam_remix.mp3/");
                player = MediaPlayer.create(FirstPage.this, uri);
                player.setLooping(true); // Set looping 
                player.setVolume(100, 100);
                player.start();

نظرات

Amir 11 سال پیش
اما خطای nullpointer میده ،
ATRAS 11 سال پیش
اسلش آخر رو بردارین .مقدار G.DIR_TEMP رو چی نوشتین؟
Amir 11 سال پیش

فرقی نداره ، با اسلش و بدون اسلش یکی شد.فایل موزیکش هست اما ...

 public static final String            DIR_SDCARD           = Environment.getExternalStorageDirectory().getAbsolutePath();
 
    public static final String            DIR_APP              = DIR_SDCARD + "/music-downloader/";
    public static final String            DIR_TEMP             = DIR_APP + "/temp/";

نظرات

Criss 11 سال پیش
شما یک "/" در انتهای music-downloader/ دارید و دوباره یک "/" در ابتداری "/temp" !
ATRAS 11 سال پیش

شما یک اسلش اظافه گذاشتین.در این خط کد یه اسلش اظافس.

 
  Uri uri =Uri.parse(G.DIR_TEMP +"/bavarkonam_remix.mp3/");

شما باید اینجوری بنویسین.

   Uri uri =Uri.parse(G.DIR_TEMP +"bavarkonam_remix.mp3/");

نظرات

Ghost 11 سال پیش

سلام دوستان .

ببینید من این کد رو گذاشتم توی یک دکمه . وقتی روی دکمه کلیک میشه موزیک پخش

player = MediaPlayer.create(MainActivity.this, R.raw.music);
player.setLooping(true); // Set looping
player.setVolume(100,100);
player.start();

بعد این کد رو هم گذاشتم که بعد از یک ثانیه آهنگ متوقف بشه :

  Thread thread = new Thread(new Runnable() {

@Override
public void run() {
try {
Thread.sleep(1000);
player.stop();
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
});
thread.start();

ببینید من وقتی یکبار روی دکمه کلیک میکنم آهنگ پخش میشه و پس از یک ثانیه متوقف میشه . ولی وقتی دوبار یا بیش از یکبار روی دکمه کلیک میکنم آهنگ هر یک ثانیه یکبار متوقف میشه و دوباره پخش میشه و هی پشت سر هم پخش میشه .

امیدوارم مظورم رو فهمیده باشید . لطفا جواب بدید .

منتظرم

نظرات

مهدی 10 سال پیش

اگه بخوایم آهنگ رو از اینترنت دانلود بعد پخشش کنیم ، چی کار باید کرد ؟

نظرات

MEHDI007 10 سال پیش
این دوتا آموزش رو ببینید ولی خیلی کار ساده ای هست و با اموزش های استاد اصلا کاری نیست که نشه انجام داد همه چیز کامل آموزش داده شده (http://goo.gl/zqjVNB ) & (http://goo.gl/26NVC9)
SaeiD-as 9 سال پیش

دوستان من یک فایل رو play می کنم، وقتی از اکتیویتی خارج می شم اون آهنگ همچنان play میشه که خیلی خوبه و مشکلی نیست، اما زمانی که مجدد به همون اکتیویتی برمی گردم می خوام seekbar روی همون قسمت آهنگ باشه که داره پخش میشه ولی باز برگشته به اول و اگر روی دکمه play کلیک کنم مجدد آهنگ play میشه! یعنی آهنگ همزمان دو بار پخش میشه! لطفا راهنمایی کنید چطوری درستش کنم.

@Override
protected void onResume() {
super.onResume();

if(playing == true){
Uri uri = Uri.parse(G.DIR_SOUND + "/" + soundThumbnail);
player = MediaPlayer.create(ActivityMain.this, uri);
player.setLooping(false); // Set looping
player.setVolume(100,100);
MediaMetadataRetriever mmr = new MediaMetadataRetriever();
mmr.setDataSource(G.context,uri);
String durationStr = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
int millSecond = Integer.parseInt(durationStr);
int min = (int) Math.floor((millSecond / 1000) / 60);
int sec = (millSecond / 1000) % 60;
txtPlayTime.setText(min + " : " + sec);

if (player.isPlaying() == false) {
skbPlay.setProgress((100 * player.getDuration()) / (millSecond));//اینجا می خوام ست کنم ولی نمی شه!
imgPlay.setImageResource(R.drawable.ic_pause);
} else if (player.isPlaying() == true) {
imgPlay.setImageResource(R.drawable.ic_play);
}
}

 

نظرات

SaeiD-as 9 سال پیش
خودم فکر می کنم زمانی که player رو مجدد داخل onResume میسازم این مشکل بوجود میاد، ولی نمی دونم چطوری می تونم همون آهنگ رو معرفیش کنم

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