android使用service

运行效果:一开始app调用service播放音乐,点击左上角的音量按钮会停止播放音乐。

       

结构目录图:

activity_main.xml:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     xmlns:app="http://schemas.android.com/apk/res-auto"
 4     xmlns:tools="http://schemas.android.com/tools"
 5     android:layout_width="match_parent"
 6     android:layout_height="match_parent"
 7     android:background="@drawable/bg"
 8     tools:context=".MainActivity">
 9
10     <ImageButton
11         android:id="@+id/btn_play"
12         android:src="@drawable/play"
13         android:layout_width="wrap_content"
14         android:layout_height="wrap_content" />
15
16 </RelativeLayout>
MainActivity:
 1 package com.mingrisoft.serveicmusicplayer;
 2
 3 import android.content.Intent;
 4 import android.support.v7.app.AppCompatActivity;
 5 import android.os.Bundle;
 6 import android.view.View;
 7 import android.widget.ImageButton;
 8
 9 public class MainActivity extends AppCompatActivity {
10
11     @Override
12     protected void onCreate(Bundle savedInstanceState) {
13         super.onCreate(savedInstanceState);
14         setContentView(R.layout.activity_main);
15
16         final Intent intent = new Intent(MainActivity.this, MusicService.class);
17
18         ImageButton btn_play = findViewById(R.id.btn_play); //获取“播放/停止”按钮
19         //启动service与停止service,实现播放背景音乐与停止播放背景音乐
20         btn_play.setOnClickListener(new View.OnClickListener() {
21             @Override
22             public void onClick(View v) {
23                 if (MusicService.isplay == false) { //判断音乐播放状态
24                     //启动service,从而实现播放背景音乐
25                     startService(intent);
26                     //更换播放背景音乐图标
27                     ((ImageButton) v).setImageDrawable(getResources().getDrawable(R.drawable.play, null));
28                 } else {
29                     //停止service,从而实现停止播放背景音乐
30                     stopService(intent);
31                     //更换停止背景音乐图标
32                     ((ImageButton) v).setImageDrawable(getResources().getDrawable(R.drawable.stop, null));
33                 }
34             }
35         });
36     }
37
38     @Override
39     protected void onStart() {  //实现进入界面时,启动背景音乐service
40         //启动service,从而实现播放背景音乐
41         startService(new Intent(MainActivity.this, MusicService.class));
42
43         super.onStart();
44     }
45 }
MusicService:
 1 package com.mingrisoft.serveicmusicplayer;
 2
 3 import android.app.Service;
 4 import android.content.Intent;
 5 import android.media.MediaPlayer;
 6 import android.os.IBinder;
 7
 8 public class MusicService extends Service {
 9     static boolean isplay;  //定义当前播放状态
10     MediaPlayer player; //MediaPlayer对象
11
12     public MusicService() {
13     }
14
15     @Override
16     public IBinder onBind(Intent intent) {  //必须实现的绑定方法
17         // TODO: Return the communication channel to the service.
18         throw new UnsupportedOperationException("Not yet implemented");
19     }
20
21     @Override
22     public void onCreate() {    //创建MediaPlayer对象并加载播放的音乐文件
23         player = MediaPlayer.create(this, R.raw.music);
24
25         super.onCreate();
26     }
27
28     @Override
29     public int onStartCommand(Intent intent, int flags, int startId) {
30         if (!player.isPlaying()) {  //如果没有播放音乐
31             player.start(); //播放音乐
32             isplay = player.isPlaying();    //当前状态正在播放音乐
33         }
34
35         return super.onStartCommand(intent, flags, startId);
36     }
37
38     @Override
39     public void onDestroy() {   //停止音乐的播放
40         player.stop();  //停止音频的播放
41         isplay = player.isPlaying();    //当前状态没有播放音乐
42         player.release();   //释放资源
43
44         super.onDestroy();
45     }
46 }
manifests:
 1 <?xml version="1.0" encoding="utf-8"?>
 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
 3     package="com.mingrisoft.serveicmusicplayer">
 4
 5     <application
 6         android:allowBackup="true"
 7         android:icon="@mipmap/ic_launcher"
 8         android:label="@string/app_name"
 9         android:roundIcon="@mipmap/ic_launcher_round"
10         android:supportsRtl="true"
11         android:theme="@style/AppTheme">
12         <activity android:name=".MainActivity">
13             <intent-filter>
14                 <action android:name="android.intent.action.MAIN" />
15
16                 <category android:name="android.intent.category.LAUNCHER" />
17             </intent-filter>
18         </activity>
19
20         <service
21             android:name=".MusicService"
22             android:enabled="true"
23             android:exported="true"></service>
24     </application>
25
26 </manifest>

原文地址:https://www.cnblogs.com/hemeiwolong/p/12634616.html

时间: 2024-10-11 00:23:52

android使用service的相关文章

android 远程Service以及AIDL的跨进程通信

在Android中,Service是运行在主线程中的,如果在Service中处理一些耗时的操作,就会导致程序出现ANR. 但如果将本地的Service转换成一个远程的Service,就不会出现这样的问题了. 转换成远程Service非常简单,只需要在注册Service的时候将他的android:process的属性制定成 :remote就可以了. 重新运行项目,你会发现,不会出现ANR了. 为什么将MyService转换成远程Service后就不会导致程序ANR了呢?这是由于,使用了远程Serv

android的Service的实例

package com.android.service; import android.app.IntentService;import android.content.Intent; public class HelloIntentService extends IntentService{ public HelloIntentService() {        super("HelloIntentService");        // TODO Auto-generated c

(六)Android中Service通信

一.启动Service并传递参数 传递参数时只需在startService启动的Intent中传入数据便可,接收参数时可在onStartCommand函数中通过读取第一个参数Intent的内容来实现 1.MainActivity.java package com.example.shiyanshi.serviceconnected; import android.app.Activity;import android.content.Intent;import android.os.Bundle

Android 测试Service的生命周期

1 package com.example.myapp4; 2 3 import android.support.v7.app.ActionBarActivity; 4 import android.content.Intent; 5 import android.os.Bundle; 6 import android.view.Menu; 7 import android.view.MenuItem; 8 import android.view.View; 9 import android.w

Android之Service通信-(2)

一.Service通过IBinder与Activity进行通信 在Service中进行下载 Service package chuiyuan.lsj.androidjava.service; import android.app.Service; import android.content.Intent; import android.os.Binder; import android.os.IBinder; import android.util.Log; import android.wi

Android——判断Service是否已经启动

延续百度地图定位的Demo,采用Service来进行百度定位,并且将数据上传到服务器上遇到了一个问题:在真机中使用清理内存来关闭程序的之后,Service会被关闭,但是过几秒中,它又会自动重启:重启就算了,而且再次登陆系统的时候,又会开启一个一样的服务,在LogCat中就会看到每次都获取到两次的定位数据.然后想想是否可以在建立Service之前判断这个服务有没有被创建?只要能做这个判断,那么服务存在我们就不管它,如果不存在则创建,本着这个思路,百度发现可行(Service后台服务创建时最好都要判

Android Web Service学习总结(一)

最近学习android平台调用webWebService,学习了一篇不错的博客(http://blog.csdn.net/lyq8479/article/details/6428288),可惜是2011年时的方法,而不适合现在android4.0之后的android版本,所以通过一番学习和研究,总结如下. web Service简介 通俗的理解:通过使用WebService,我们能够像调用本地方法一样去调用远程服务器上的方法.我们并不需要关心远程的那个方法是Java写的,还是PHP或C#写的:我

如何从python代码中直接访问Android的Service

在Kivy中,通过pyjnius扩展可以间接调用Java代码,而pyjnius利用的是Java的反射机制.但是在Python对象和Java对象中转来转去总让人感觉到十分别扭.好在android提供了binder这个进程间通信的功能,Java中的Service也是基于Binder的C++代码封装来实现进程间通信的,这也为从Python代码中绕开pyjnius直接访问Java代码提供了可能,既然Java的Service是基于C++的封装来实现的,也同样可以在Python中封装同样的C++代码,这篇文

【Android】Android中Service类onStartCommand的返回值有关问题(转)

@Override public int onStartCommand(Intent intent, int flags, int startId) { System.out.println("---------->>onStartCommand2"); return super.onStartCommand(intent, flags, startId); } Android开发的过程中,每次调用startService(Intent)的时候,都会调用该Service对象

Android中Service的使用

我个人的理解是:我们平时使用的android系统的app的后台应用,就是这个原理 可以利用Service实现程序在后台运行,依照这个原理,可以通过Service来实现关键代码的运行与实现. <一>下面大体说一下我在极客学院跟着视频做的一个Service的小实现 1,首先点击左上角file->new往下拉,看到一个Service,创建MyService.java 这个就是我们的Service服务. 后续可以在这其中添加想要在后台运行的关键代码等. 2,首先创建项目后,在layout或中的x