Unlimited WordPress themes, graphics, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Android SDK
Code

অ্যান্ড্রয়েডে মিউজিক প্লেয়ার তৈরি: প্রজেক্ট সেট আপ

by
Difficulty:BeginnerLength:LongLanguages:

Bengali (বাংলা) translation by Syeda Nur-E-Royhan (you can also view the original English article)

মিডিয়া প্লেব্যাক নিয়ে কাজ করার মতো রিসোর্স অ্যান্ড্রয়েড প্ল্যাটফর্মে সব সময়ই থাকে। এগুলোর সাহায্যে আপনার অ্যাপ্লিকেশন দিয়ে ব্যবহারকারী এবং তাদের মিউজিক ফাইলগুলোর মধ্যে একটা ইন্টারফেস তৈরি করা যায়। এই সিরিজের টিউটোরিয়ালে আমরা অ্যান্ড্রয়েডের জন্য মৌলিক কিছু মিউজিক প্লেয়ার অ্যাপ্লিকেশন তৈরি করবো। এই অ্যাপ্লিকেশনে ইউজার ডিভাইসে গানের একটি তালিকা সরবরাহ করবে যাতে করে ব্যবহারকারী চালানোর জন্য নির্দিষ্ট গান সিলেক্ট করতে পারেন। এই অ্যাপ্লিকেশনের মাধ্যমে আপনি প্লেব্যাক নিয়ন্ত্রণ করার সুবিধাও পাবেন যেটার সাহায্যে ব্যবহারকারী দূরে থাকলেও গান চলতে থাকবে। প্লেব্যাক চলতে থাকার সময় একটি নোটিফিকেশন দেখাবে।

ভূমিকা

মিউজিক প্লেয়ার তৈরিতে ডিভাইস থেকে গানের ট্র্যাক উদ্ধার করার জন্য ContentResolver, ক্লাস, অডিও চালানোর জন্য MediaPlayer ক্লাস এবং প্লেব্যাক নিয়ন্ত্রণ করার জন্য MediaController ক্লাস ব্যবহৃত হবে। ব্যবহারকারী যখন সরাসরি অ্যাপ্লিকেশন ব্যবহার করবেন না তখনও অডিও চালানোর জন্য আমরা একটি Service ব্যবহার করবো। আপনি যদি মাঝামাঝি দক্ষতার একজন অ্যান্ড্রয়েড ডেভেলপার হয়ে থাকেন তাহলে এই সিরিজটি সম্পন্ন করতে পারবেন। ইতোমধ্যেই কিছু অ্যাপ্লিকেশন তৈরির অভিজ্ঞতা থাকার ফলে এই সিরিজটি আপনার জন্য সহজ হয়ে যাবে। অ্যাপ্লিকেশনটির চূড়ান্ত রুপের এক ঝলক দেখানো হল:

Android Music Player

এই টিউটোরিয়ালে আমরা ContentResolver এবং Cursor ক্লাস ব্যবহার করে অ্যাপ্লিকেশন তৈরি এবং অডিও ফাইলের জন্য ইউজার ডিভাইস কোয়েরি করবো। পরবর্তী অংশে গানের তালিকা উপস্থাপন করার জন্য একটি Adapter-এর নমুনা ব্যবহার করবো যেখানে ব্যবহারকারী ওই তালিকায় যে কোন একটিতে স্পর্শ করলে গান চালু হয়ে যায়। এই সিরিজের সর্বশেষ ইন্সটলমেন্টে প্লেব্যাকে ব্যবহারকারীর নিয়ন্ত্রণ প্রতিষ্ঠা, ফরোয়ার্ড এবং ব্যাক এড়িয়ে যাওয়ার সুবিধা দেওয়া এবং শাফল করার সুযোগ রাখতে MediaController ক্লাস ব্যবহার করবো। এই সিরিজের পর, অ্যাপ্লিকেশনটিকে আরও কর্মক্ষম করতে পারে, মিডিয়া প্লেব্যাকের এমন সব দিকগুলো খুঁজে বের করবো। এর মধ্যে রয়েছে অডিও ফোকাস নিয়ন্ত্রণ করা, বিভিন্ন উপায়ে মিডিয়া ফাইল উপস্থাপন করা, এবং স্ট্রিমিং মিডিয়া চালু করা।

১। একটি নতুন প্রজেক্ট তৈরি এবং নকশা করুন।

ধাপ ১

একটি নতুন অ্যান্ড্রয়েড প্রজেক্ট তৈরি করুন। আপনি যদি এক্লিপ্স ব্যবহার করে থাকেন, তাহলে আইডিই (ইন্টিগ্রেটেড ডেভেলপমেন্ট এনভায়রনমেন্ট) দিয়ে একটি মূল Activity ক্লাস তৈরি এবং ফাইল বিন্যস্ত করুন। এই সিরিজে ব্যবহৃত কিছু কোডের জন্য আমাদের কমপক্ষে ১৬ স্তরের এপিআই দরকার হবে। কাজেই পুরনো ভার্সনটির সাথে কাজ করার উপযোগী হতে হলে কিছু বাড়তি পদক্ষেপ নিতে হবে। প্রজেক্টটি তৈরি হয়ে গেলে এটার ম্যানিফেস্ট ফাইল ওপেন করুন। Manifest এলিমেন্টের ভিতর নিচের পারমিশনটি যোগ করুন:

ব্যবহারকারীর ডিভাইস কোন কাজ না করে পরে থাকলেও যাতে মিউজিকের প্লেব্যাক চলতে থাকে তা নিশ্চিত করার জন্য আমরা এই পারমিশনটি ব্যবহার করবো। আমার ম্যানিফেস্টে ইতোমধ্যেই আপনার মূল Activity ক্লাসের জন্য উপযোগী উপকরণ থাকার কথা। screenOrientation এবং LaunchMode সেট করতে Activity এলিমেন্টে নিচের বৈশিষ্ট্যগুলো যোগ করুন।

আমরা পোর্ট্রেইট অরিয়েন্টেশনের জন্য সহজবোধ্যতার উপর ভিত্তি করে এগিয়ে যাবো। অ্যাপ্লিকেশন থেকে সরে যাওয়ার পর আবার ফিরে আসার প্রক্রিয়াটিতে LaunchMode সাহায্য করতে পারবে। এই মুহূর্তে চলা গানের নোটিফিকেশন এখানে প্রদর্শন করবো। ওই নোটিফিকেশনে স্পর্শ করলে ব্যবহারকারী আবারও অ্যাপ্লিকেশনে ফিরে যেতে পারবেন। আমরা মিউজিক প্লেব্যাকের জন্য একটি Service ক্লাসও ব্যবহার করবো। application এলিমেন্টের ভিতর এবং activity এলিমেন্টের পর প্রজেক্ট ম্যানিফেস্টে নিচের লাইনটি যোগ করুন।

আপনার পছন্দমতো প্যাকেজ এবং ক্লাসের নাম পরিবর্তন করুন।

ধাপ ২

প্রজেক্টের মূল লেআউট ফাইল ওপেন করুন এবং নিচের লেআউট অনুযায়ী এটির কন্টেন্টগুলো প্রতিস্থাপন করুন:

আপনার মূল Activity ক্লাসের নাম যদি ভিন্ন রকম হয় তাহলে tools:context বৈশিষ্ট্য পরিবর্তন করতে ভুলবেন না। এই লেআউটে রয়েছে একটি ListView যেখানে গানের তালিকা থাকবে।

শাফলের কার্যক্রম পরিচালনার জন্য আমরা দুইটি মেন্যু আইটেম যোগ করবো যাতে অ্যাপ্লিকেশন থেকে বের হওয়ার জন্য তাদের মধ্যে প্রয়োজনমত যে কোন একটি ব্যবহার করা যায়। আপনার মূল মেন্যু ফাইল ওপেন করুন (res/menu/main.xml) এবং এর কন্টেন্ট নিচেরগুলো দিয়ে প্রতিস্থাপন করুন:

আপনি চাইলে টাইটেল স্ট্রিংগুলো res/values/strings.xml ফাইলে সংরক্ষণ করতে পারেন। এই আইটেম দুইটি আঁকার যোগ্য ফাইল ইঙ্গিত করে। আপনি নিজের মতো একটি তৈরি করুন অথবা এটি দিয়েই শুরু করতে পারেন:

Android Music Player Random Button
Android Music Player End Button

আমরা প্লেব্যাক নোটিফিকেশনে ডিসপ্লে করার জন্য একটি আইকনও ব্যবহার করবো। নতুন একটি তৈরি করুন অথবা নিচের নমুনাটি ব্যবহার করুন:

Android Music Player Play Button

কোডটি র‍্যান্ড, এন্ড, এবং প্লে নাম দিয়ে ইমেজগুলোকে নির্দেশ করবে। কাজেই আপনি ফাইলের নাম একটাই ব্যবহার করছেন তা নিশ্চিত হয়ে নিন। ইমেজগুলো আপনার প্রজেক্টের আঁকার যোগ্য ফোল্ডার বা ফোল্ডারগুলোতে কপি করুন। আমরা এই কাজগুলো পরে করবো।

২। গানের জন্য ডিভাইসগুলোকে কোয়েরি করুন

ধাপ ১

চলুন অডিও ফাইলের জন্য ব্যবহারকারীর ডিভাইসটি কোয়েরি করে ফেলি। প্রথমে, আপনার প্রজেক্টে একটি নতুন ক্লাস যোগ করুন এবং নাম দিন Song. আমরা একটি মাত্র অডিও ফাইলের ডাটার মডেল তৈরি করার জন্য এই ক্লাসটি ব্যবহার করবো। ক্লাস ডিক্লেয়ারেশনের মধ্যে প্রতিটি ট্র্যাকে সংরক্ষণ করতে চাই এমন ডাটাগুলোর ভ্যারিয়েবলের তিনটি নমুনা যোগ করুন:

এরপর, ভ্যারিয়েবলের নমুনাগুলো ছোট করে আনা যায় এমন একটি কন্সট্রাক্টর মেথড যোগ করুন।

সবশেষে, ইন্সট্যান্স ভ্যারিয়েবলের জন্য গেট মেথড যোগ করুন:

আপনি যদি আরও ট্র্যাক ইনফরমেশন ব্যবহার করতে চান তাহলে আপনি ক্লাসে বাড়তি ইন্সট্যান্স ভ্যারিয়েবল যোগ করতে পারেন।

ধাপ ২

মূল Activity ক্লাস ওপেন করুন এবং নিচের ইম্পোর্টগুলো যোগ করুন:

onCreate মেথডের আগে ইন্সট্যান্স ভ্যারিয়েবল ডিক্লেয়ার করুন:

আমরা গানগুলো একটি তালিকা হিসেবে সংরক্ষণ করবো এবং মূল লেআউটের ListView ইন্সট্যান্সে উপস্থাপন করবো। onCreate-এ, কন্টেন্ট ভিউ সেট করার পর মূল লেআউটে দেওয়া আইডি ব্যবহার করে ListView ইন্সট্যান্স উদ্ধার করুন।

নিচে যেভাবে দেখানো আছে সেভাবে তালিকাটিকে ছোট করে আনুন:

এরপর, মূল Activity ক্লাস ডিক্লেয়ারেশনে, বর্তমান মেথডের পর অডিও ফাইলের ইনফরমেশন উদ্ধার করার জন্য একটি সহায়ক মেথড তৈরি করুন:

এই মেথডের ভিতরে মিউজিক ফাইল কোয়েরি করার জন্য একটি ContentResolver ইন্সট্যান্স তৈরি করুন, এক্সটারনাল মিউজিক ফাইলের জন্য ইউআরআই উদ্ধার করুন, এবং ContentResolver ব্যবহার করে একটি Cursor ইন্সট্যান্স তৈরি করুন:

এখন আমরা ফলাফল কী এসেছে তা ফিরে দেখতে পারি। প্রথমে দেকেহ নেই আমাদের ডাটা অকাট্য কিনা:

প্রথমে আমরা প্রতিটি গানের জন্য প্রয়োজনীয় ডাটা আইটেমের কলাম ইনডেক্স উদ্ধার করবো। এরপর আমরা ফলাফলের মধ্য দিয়ে বারবার ঘুরে দেখার আগে এগুলো ব্যবহার করে নতুন একটি song অবজেক্ট তৈরি করে তালিকাভুক্ত করবো। 

onCreate-এ ফিরে যান। আমাদের যোগ করা কোডের পর এটিকে নতুন মেথড হিসেবে ধরে নিন:

৩। গানগুলো উপস্থাপন করুন

ধাপ ১

এখন আমরা ইউজার ইন্টারফেসে গানের তালিকা প্রদর্শন করতে পারবো। onCreate মেথডে, কিছুক্ষণ আগে তৈরি সহায়ক মেথড কাজে লাগানোর পর, ডাটাগুলো বিন্যস্ত করে ফেলি যাতে করে গানগুলো বর্ণানুক্রমে দেখা যায়:

আমরা Song ক্লাসে আমাদের যুক্ত করা গেট মেথড ব্যবহার করে title ভ্যারিয়েবল ব্যবহার করি। ফলে একটি compare মেথড প্রতিষ্ঠিত হয় যাতে করে গানগুলো টাইটেল অনুযায়ী বিন্যস্ত হয়। 

ধাপ ২

চলুন তালিকার প্রতিটি গান নির্দেশ করার জন্য একটি লেআউট নির্ধারণ করে ফেলি। আপনার প্রজেক্টের res/layout ফোল্ডারে নতুন একটি ফাইল যোগ করুন এবং নাম দিন song.xml, এরপর নিচেরটি প্রবেশ করান:

আপনার পছন্দ অনুযায়ী লেআউটটিকে নিজের মতো সাজিয়ে নিন। তালিকার প্রতিটি গান টাইটেল এবং আর্টিস্ট টেক্সট স্ট্রিং দিয়ে নির্দেশিত হবে। কাজেই আমরা ডাটাগুলোকে উপস্থাপন করার জন্য TextViews ব্যবহার করবো। খেয়াল করে দেখুন যে LinearLayout ওপেনিং ট্যাগটি একটি onClick অ্যাট্রিবিউটকে তালিকাভুক্ত করেছে। আমরা এই প্রক্রিয়াটি মূল Activity ক্লাসে ব্যবহার করবো যাতে গানের তালিকায় ব্যবহারকারীর স্পর্শে তা কাজ করে এবং তালিকায় থাকা আইটেমটি যে গান নির্দেশ করে সেটি চালু হয়ে যায়।

ধাপ ৩

লিস্ট ভিউয়ের গানগুলোর নির্দেশিকা তৈরির জন্য আমরা একটি Adapter ব্যবহার করবো। আপনার অ্যাপ্লিকেশনে একটি নতুন ক্লাস যোগ করুন। এটিকে SongAdapter অথবা আপনার মনমতো কোন একটি নাম দিন। ক্লাস তৈরির সময় এটিকে সুপারক্লাস android.widget.BaseAdapter দিন। একিল্পস নিচের আউটলাইনটি প্রবেশ করাবে:

নিচের ইম্পোর্টগুলো যোগ করতে হবে:

ক্লাস ডিক্লেয়ারেশনের ভিতরে নিচের ইন্সট্যান্স ভ্যারিয়েবলগুলো ডিক্লেয়ার করুন:

আমরা মূল Activity ক্লাস থেকে গানের তালিকা সরবরাহ করবো এবং আমাদের তৈরি গানের লেআউটে TextViews-এর সাথে টাইটেল এবং আর্টিস্টের স্ট্রিং নির্দেশ করতে LayoutInflater ব্যবহার করবো।

ইন্সট্যান্স ভ্যারিয়েবলের পর অ্যাডাপটারটিকে এগুলো কমিয়ে আনার জন্য একটি কন্সট্রাক্টর মেথড দিতে হবে:

তালিকার আকার আগের মতো করতে getCount মেথডের কন্টেন্ট পরিবর্তন করুন।

আপনি চাইলে getItem এবং getItemId মেথড ব্যবহার না করেই চলে যেতে পারেন। নিচে যেমন দেখানো আছে ঠিক তেমনি করে getView মেথডের বাস্তবায়ন আপডেট করুন:

আমরা পজিশন ইনডেক্স ব্যবহার করে তালিকা থেকে সঠিক Song ইন্সট্যান্স উদ্ধার করে টাইটেল এবং আর্টিস্ট টেক্সট সেট করতে পারি। এতে করে আমরা গানের লেআউট ফাইলে যে ভিউগুলো যোগ করেছি তার সাথে এই স্ট্রিংগুলো নির্দেশনা আকারে যাবে।  আমরা পজিশনটিকে ভিউ ট্যাগ হিসেবেও সেট করতে পারি। এতে করে ব্যবহারকারী যখন তালিকার কোন আইটেমে ক্লিক করবে তখন ঠিক গানটিই চলবে। মনে রাখবেন যে song.xml লেআউট ফাইলে একটি onClick অ্যাট্রিবিউট রয়েছে। আমরা Activity-র ট্যাগ উদ্ধার করার জন্য তালিকাভুক্ত প্রক্রিয়াটি ব্যবহার করবো।

ধাপ ৩

মূল Activity ক্লাসে, onCreate মেথডে তালিকা বিন্যস্ত করার পর Adapter ক্লাসের একটি নতুন নমুনা তৈরি করুন এবং সেটিকে ListView-এ সেট করুন:

আপনি যখন অ্যাপ্লিকেশনটি চালাবেন তখন ডিভাইসে গানের তালিকাটি দেখা যাবে। সেখানে ক্লিক করলে ওই মুহূর্তের জন্য অ্যাপ্লিকেশনে  ব্যতিক্রম প্রতিক্রিয়া আসবে। তবে ক্লিক নিয়ন্ত্রণ করার পদ্ধতি আমরা পরবর্তী টিউটোরিয়ালে দেখাব।

উপসংহার

এখন আমরা ইউজার ডিভাইস থেকে গান নেওয়ার উপযোগী করে অ্যাপ্লিকেশনটি সেট করতে পেরেছি। পরবর্তী অংশে, ব্যবহারকারী যখন MediaPlayer ব্যবহার করে একটি গান নির্বাচন করবে তখন আমরা প্লেব্যাক শুরু করতে পারবো। আমরা Service ক্লাস ব্যবহার করে প্লেব্যাক কাজে লাগাবো যাতে করে ব্যবহারকারী যখন অন্যান্য অ্যাপ্লিকেশন ব্যবহার করবে তখনও তা চলতে থাকে। সবশেষে, আমরা MediaController ক্লাস ব্যবহার করে ব্যবহারকারীকে প্লেব্যাকের উপর সম্পূর্ণ নিয়ন্ত্রণ প্রতিষ্ঠা করতে সাহায্য করবো।

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.