在Android中实现服务?
简介
在许多 Android 应用程序中,我们可以看到它们执行一些后台任务,例如在后台播放音乐。许多音乐应用程序可以在应用程序未打开时播放歌曲并在后台播放音乐。此任务可以通过 Android 中的服务来完成。在本文中,我们将了解如何在 Android 中实现服务。
实现
我们将创建一个简单的应用程序,其中我们将显示一个 TextView 用于显示应用程序的标题。然后我们将创建两个按钮,一个按钮用于启动我们的音频服务,另一个按钮用于停止音频服务。
步骤 1:在 Android Studio 中创建一个新项目
导航到 Android Studio,如下面的屏幕所示。在下面的屏幕中,单击“新建项目”以创建一个新的 Android Studio 项目。
单击“新建项目”后,您将看到下面的屏幕。
在此屏幕中,我们只需选择“空活动”并单击“下一步”。单击“下一步”后,您将看到下面的屏幕。
在此屏幕中,我们只需指定项目名称。然后包名将自动生成。
注意:确保选择 Java 作为语言。
指定所有详细信息后,单击“完成”以创建一个新的 Android Studio 项目。
项目创建完成后,我们将看到两个打开的文件,即 activity_main.xml 和 MainActivity.java 文件。
步骤 2:使用 activity_main.xml
导航到 activity_main.xml。如果此文件不可见。要打开此文件。在左侧窗格中导航到 app>res>layout>activity_main.xml 以打开此文件。打开此文件后。将以下代码添加到其中。代码中添加了注释以详细了解。
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <!-- creating a text view on below line--> <TextView android:id="@+id/idTVHeading" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_centerInParent="true" android:layout_marginStart="20dp" android:layout_marginTop="20dp" android:layout_marginEnd="20dp" android:layout_marginBottom="20dp" android:padding="4dp" android:text="Implementing Services in Android" android:textAlignment="center" android:textColor="@color/black" android:textSize="20sp" android:textStyle="bold" /> <!-- creating a button on below line --> <Button android:id="@+id/idBtnStartAudioService" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/idTVHeading" android:layout_margin="15dp" android:text="Start Audio Service" android:textAllCaps="false" /> <!-- creating a button on below line --> <Button android:id="@+id/idBtnStopAudioService" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/idBtnStartAudioService" android:layout_margin="15dp" android:text="Stop Audio Service" android:textAllCaps="false" /> </RelativeLayout>
说明:在上面的代码中,我们正在创建一个根布局作为相对布局。在此布局中,我们正在创建一个 TextView,用于显示应用程序的标题。之后,我们创建了两个按钮,我们将使用它们来启动和停止我们的音频服务。
步骤 3:为我们的音频服务创建一个新的 Java 类
导航到 app>java>您的应用程序的包名>右键单击它>新建>Java 类并将其命名为 AudioService 并将以下代码添加到其中。代码中添加了注释以详细了解。
package com.example.java_test_application; import android.app.Service; import android.content.Intent; import android.media.MediaPlayer; import android.os.IBinder; import android.provider.Settings; import androidx.annotation.Nullable; public class AudioService extends Service { // creating variable for media player on below line. private MediaPlayer mediaPlayer; @Override public int onStartCommand(Intent intent, int flags, int startId) { // initializing variable for media player. mediaPlayer = MediaPlayer.create(this, Settings.System.DEFAULT_RINGTONE_URI); // setting looping for media player and starting it. mediaPlayer.setLooping(true); mediaPlayer.start(); return START_STICKY; } @Override public void onDestroy() { super.onDestroy(); // stopping the media player/ mediaPlayer.stop(); } @Nullable @Override public IBinder onBind(Intent intent) { return null; } }
说明:在上面的代码中,我们正在使用 Service 类扩展我们的 AudioService 类。在此类中,我们首先为媒体播放器创建一个变量。然后我们创建了一个 onStartCommand 方法。在此方法中,我们正在初始化我们的媒体播放器并启动它以播放设置为设备的默认铃声。然后我们创建一个 onDestory 方法,它将停止媒体播放器。
步骤 4:在 AndroidManifest.xml 文件中添加服务
导航到 app>AndroidManifest.xml 文件并在 application 标记中添加以下权限以读取短信。
<!-- adding a service in manifest file --> <service android:name=".AudioService" />
步骤 5:使用 MainActivity.java 文件
导航到 MainActivity.java。如果此文件不可见。要打开此文件。在左侧窗格中导航到 app>res>layout>MainActivity.java 以打开此文件。打开此文件后。将以下代码添加到其中。代码中添加了注释以详细了解。
package com.example.java_test_application; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; public class MainActivity extends AppCompatActivity { // creating variables on below line for text view. private Button startAudioServiceBtn, stopAudioServiceBtn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // initializing variables on below line. startAudioServiceBtn = findViewById(R.id.idBtnStartAudioService); stopAudioServiceBtn = findViewById(R.id.idBtnStopAudioService); // adding click listeners on below line. startAudioServiceBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // on below line starting the service. startService(new Intent(MainActivity.this, AudioService.class)); // displaying toast message on below line. Toast.makeText(MainActivity.this, "Audio Service Started..", Toast.LENGTH_SHORT).show(); } }); stopAudioServiceBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // on below line stopping the service. stopService(new Intent(MainActivity.this, AudioService.class)); // displaying toast message on below line. Toast.makeText(MainActivity.this, "Audio Service Stopped..", Toast.LENGTH_SHORT).show(); } }); } }
说明:在上面的代码中,我们首先为我们的按钮创建变量。现在我们将看到 onCreate 方法。这是每个 Android 应用程序的默认方法。此方法在创建应用程序视图时调用。在此方法中,我们正在设置内容视图,即名为 activity_main.xml 的布局文件,以从该文件设置 UI。在 onCreate 方法中,我们正在使用我们在 activity_main.xml 文件中给出的 ID 初始化变量。之后,我们为这两个按钮添加了一个 onClick 监听器。对于我们的第一个按钮,我们正在调用 startService 方法来启动我们的服务。对于第二个按钮,我们正在调用 stopService 来停止我们的服务并向其传递一个 Intent 以供 AudioService 启动和停止我们的服务。同时,我们显示一条吐司消息,表明服务已启动或停止。
添加上述代码后,我们只需单击顶部栏中的绿色图标即可在移动设备上运行我们的应用程序。
注意 - 确保您已连接到您的真实设备或模拟器。
输出
结论
在上面的代码中,我们了解了如何在 Android 中实现服务以及一个示例。