सर्विस के लिए startForeground इम्प्लीमेंट करना
उदाहरण में जाने से पहले, हमें पता होना चाहिए कि Android में सर्विस क्या है। सर्विस UI के साथ इंटरैक्ट किए बिना बैकग्राउंड ऑपरेशन करती है और एक्टिविटी नष्ट होने के बाद भी काम करती रहती है।
यह उदाहरण दर्शाता है कि सर्विस के लिए startForeground कैसे इम्प्लीमेंट करें।
चरण 1 - नया प्रोजेक्ट बनाएं
Android Studio में File → New Project पर जाएं और नया प्रोजेक्ट बनाने के लिए सभी आवश्यक विवरण भरें।
चरण 2 - लेआउट फ़ाइल में कोड जोड़ें
res/layout/activity_main.xml में निम्नलिखित कोड जोड़ें:
<?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>
उपरोक्त कोड में, हमने TextView लिया है, जब उपयोगकर्ता TextView पर क्लिक करता है, तो यह startForeground() शुरू करेगा।
चरण 3 - MainActivity.java में कोड जोड़ें
src/MainActivity.java में निम्नलिखित कोड जोड़ें:
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(ForegroundService.class)) {
text.setText("Stopped");
stopService(new Intent(MainActivity.this, ForegroundService.class));
} else {
text.setText("Started");
startService(new Intent(MainActivity.this, ForegroundService.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;
}
}
सर्विस शुरू और बंद करने के लिए हमने इंटेंट का उपयोग किया है और कॉन्टेक्स्ट और सर्विस क्लास पास की है। अब पैकेज फोल्डर में ForegroundService.java नाम से सर्विस क्लास बनाएं और निम्नलिखित कोड जोड़ें:
package com.example.andy.myapplication;
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.support.annotation.RequiresApi;
import android.support.v4.app.NotificationCompat;
import android.widget.Toast;
public class ForegroundService extends Service {
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
}
@TargetApi(Build.VERSION_CODES.O)
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Toast.makeText(this, "Notification Service started by user.", Toast.LENGTH_LONG).show();
String NOTIFICATION_CHANNEL_ID = "com.example.andy.myapplication";
String channelName = "My Background Service";
NotificationChannel chan = new NotificationChannel(NOTIFICATION_CHANNEL_ID, channelName, NotificationManager.IMPORTANCE_NONE);
chan.setLightColor(Color.BLUE);
chan.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE);
NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
if (manager != null) {
manager.createNotificationChannel(chan);
}
Intent notificationIntent = new Intent(this, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
Notification notification = new Notification.Builder(this, NOTIFICATION_CHANNEL_ID)
.setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle("My Awesome App")
.setContentIntent(pendingIntent)
.build();
startForeground(1337, notification);
return START_STICKY;
}
@RequiresApi(api = Build.VERSION_CODES.N)
@Override
public void onDestroy() {
super.onDestroy();
stopForeground(true);
Toast.makeText(this, "Notification Service destroyed by user.", Toast.LENGTH_LONG).show();
}
}
उपरोक्त कोड में हमने नोटिफिकेशन चैनल और नोटिफिकेशन बिल्डर का उपयोग किया है।
फोरग्राउंड शुरू और बंद करने के लिए कोड:
startForeground(1337, notification); stopForeground(true);
चरण 4 - Manifest.xml में कोड जोड़ें
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="com.example.andy.myapplication">
<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=".ForegroundService"/>
</application>
</manifest>
एप्लिकेशन चलाएं
अपने Android डिवाइस को कंप्यूटर से कनेक्ट करें। Android Studio में प्रोजेक्ट की एक्टिविटी फ़ाइल खोलें और टूलबार से Run आइकन पर क्लिक करें। अपना मोबाइल डिवाइस चुनें और डिवाइस पर आउटपुट देखें।
उपरोक्त परिणाम प्रारंभिक स्क्रीन है, TextView पर क्लिक करें, यह नोटिफिकेशन सर्विस शुरू करेगा।
उपरोक्त परिणाम में, सर्विस शुरू हो गई है, अब TextView पर क्लिक करें, यह नोटिफिकेशन सर्विस बंद करेगा।