অ্যান্ড্রয়েডে সার্ভিস তৈরি করা যা ডালভিক/অ্যান্ড্রয়েড সিস্টেম দ্বারা সহজে কিল না হয়
এই টিউটোরিয়ালটি দেখাবে কীভাবে একটি অ্যান্ড্রয়েড সার্ভিস তৈরি করতে হয় যা ব্যাকগ্রাউন্ডে চলতে থাকে এবং সিস্টেম দ্বারা সহজে বন্ধ করা হয় না। এটি অর্জনের জন্য START_STICKY রিটার্ন করা হয় এবং WakeLock ব্যবহার করা হয় যাতে CPU স্লিপ মোডে না যায়।
ধাপ ১: নতুন প্রজেক্ট তৈরি করুন
Android Studio-তে File → New Project এ যান এবং প্রয়োজনীয় বিবরণ পূরণ করে একটি নতুন প্রজেক্ট তৈরি করুন।
ধাপ ২: লেআউট XML ফাইল সংশোধন করুন
res/layout/activity_main.xml ফাইলে নিচের কোডটি যোগ করুন। এখানে একটি TextView ব্যবহার করা হয়েছে সার্ভিস স্টার্ট/স্টপ করার জন্য।
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:app="https://schemas.android.com/apk/res-auto"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Start Service"
android:textSize="25sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>
ধাপ ৩: MainActivity.java ফাইলে কোড যোগ করুন
src/MainActivity.java ফাইলে নিচের কোডটি লিখুন। TextView-এ ক্লিক করলে সার্ভিস স্টার্ট/স্টপ টগল হবে।
package com.example.andy.myapplication;
import android.app.ActivityManager;
import android.content.Context;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final TextView text = findViewById(R.id.text);
text.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (isMyServiceRunning(ServiceClass.class)) {
text.setText("Stopped");
stopService(new Intent(MainActivity.this, ServiceClass.class));
} else {
text.setText("Started");
startService(new Intent(MainActivity.this, ServiceClass.class));
}
}
});
}
private boolean isMyServiceRunning(Class<?> serviceClass) {
ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
if (serviceClass.getName().equals(service.service.getClassName())) {
return true;
}
}
return false;
}
}
ধাপ ৪: সার্ভিস ক্লাস তৈরি করুন (ServiceClass.java)
প্যাকেজ ফোল্ডারে ServiceClass.java নামে একটি নতুন জাভা ক্লাস তৈরি করুন এবং নিচের কোডটি যোগ করুন। এই সার্ভিস WakeLock অর্জন করে এবং START_STICKY রিটার্ন করে যাতে সিস্টেম এটিকে কিল করলে অটোমেটিক রিস্টার্ট হয়।
package com.example.andy.myapplication;
import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.media.MediaPlayer;
import android.os.Build;
import android.os.IBinder;
import android.os.PowerManager;
import android.support.annotation.RequiresApi;
import android.support.v4.app.NotificationCompat;
import android.util.Log;
import android.widget.Toast;
public class ServiceClass extends Service {
PowerManager pm;
@SuppressLint("InvalidWakeLockTag")
PowerManager.WakeLock wl;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@SuppressLint("InvalidWakeLockTag")
@Override
public void onCreate() {
super.onCreate();
pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag");
}
@TargetApi(Build.VERSION_CODES.O)
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
wl.acquire(); // WakeLock অর্জন করুন
// কিছু টাস্ক করুন
Toast.makeText(this, "Notification Service started by user.", Toast.LENGTH_LONG).show();
return START_STICKY; // সিস্টেম কিল করলে রিস্টার্ট হবে
}
@RequiresApi(api = Build.VERSION_CODES.N)
@Override
public void onDestroy() {
super.onDestroy();
wl.release(); // WakeLock রিলিজ করুন
Toast.makeText(this, "Notification Service destroyed by user.", Toast.LENGTH_LONG).show();
}
}
ধাপ ৫: AndroidManifest.xml-এ পারমিশন এবং সার্ভিস ডিক্লেয়ার করুন
AndroidManifest.xml ফাইলে WAKE_LOCK পারমিশন এবং সার্ভিস কম্পোনেন্ট ডিক্লেয়ার করুন।
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="com.example.andy.myapplication">
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service android:name=".ServiceClass"/>
</application>
</manifest>
অ্যাপ্লিকেশন চালানোর পদ্ধতি
আপনার অ্যান্ড্রয়েড ডিভাইস কম্পিউটারের সাথে সংযুক্ত করুন। Android Studio-তে প্রজেক্টের যেকোনো এক্টিভিটি ফাইল খুলে টুলবার থেকে Run আইকনে ক্লিক করুন। আপনার মোবাইল ডিভাইসটি নির্বাচন করুন।
- প্রাথমিক স্ক্রিনে "Start Service" টেক্সট থাকবে।
- টেক্সটভিউতে ক্লিক করলে সার্ভিস স্টার্ট হবে এবং টেক্সট "Started" হবে।
- আরেকবার ক্লিক করলে সার্ভিস স্টপ হবে এবং টেক্সট "Stopped" হবে।


