软件编程
位置:首页>> 软件编程>> Android编程>> android studio 3.0 service项目背景音乐实现

android studio 3.0 service项目背景音乐实现

作者:laozhang  发布时间:2023-07-03 23:34:36 

标签:android,studio,service,背景音乐

这篇文章是博主在通过学习Android Studio的同时,实现service项目中用于背景音乐的实现,邮件的发送用于随堂小测的发送邮件功能。其中也碰到需要坑和错误,最后都解决了,一起跟着学习一下吧。如果大家有更好的方法可以在下面的留言区讨论。

本次项目我主要负责Android studio的后端,以及游戏文案游戏策划,结果后来事情太散了,Android studio学的不咋地,文案写完还有帮着写一写数据库的插入语句,然后就是跟队友完成了as的后台插入声音的代码。接下来介绍的service项目中用于背景音乐的实现,邮件的发送用于随堂小测的发送邮件。

开发基础之Service

Activity可以呈现一个用户界面,但是Service运行在后台,试了以下实例,启动Service,并通过从Activity向Service传递数据。


package com.example.lhb.startservice;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.view.ViewDebug;
import android.widget.Toast;

public class MyService extends Service {
 private boolean Running=false;
 private String data="默认信息!!!";
 public MyService() {
 }

@Override
 public IBinder onBind(Intent intent) {
   // TODO: Return the communication channel to the service.
   throw new UnsupportedOperationException("Not yet implemented");
 }

@Override
 public int onStartCommand(Intent intent, int flags, int startId) {  
   data=intent.getStringExtra("data");//这里的intent是参数里的,不是自定义的
   return super.onStartCommand(intent, flags, startId);
 }

@Override
 public void onCreate() {
   super.onCreate();
   Running=true;
   new Thread(){
     @Override
     public void run() {
       super.run();
       while (Running){
         System.out.println(data);
         try {
           sleep(3000);
         } catch (InterruptedException e) {
           e.printStackTrace();
         }
       }
     }
   }.start();
 }

@Override
 public void onDestroy() {
   super.onDestroy();
   Running=false;
 }
}
//主代码
package com.example.lhb.startservice;

import android.content.Intent;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends ActionBarActivity {
 private EditText inputText;

@Override
 protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);

findViewById(R.id.btnStartService).setOnClickListener(new View.OnClickListener() {
     @Override
     public void onClick(View v) {
       inputText= (EditText) findViewById(R.id.inputText);
       if(inputText.getText().length()==0){
         Toast.makeText(MainActivity.this,"请输入传递的值!",Toast.LENGTH_SHORT).show();
         return;
       }
       Intent intent;
       intent=new Intent(MainActivity.this,MyService.class);
       intent.putExtra("data",inputText.getText().toString());
       startService(intent);
     }
   });

findViewById(R.id.btnStopService).setOnClickListener(new View.OnClickListener() {
     @Override
     public void onClick(View v) {
       Intent intent;
       intent=new Intent(MainActivity.this,MyService.class);
       stopService(intent);
     }
   });
 }
}

 

以此来完成Activity向Service传递数据的任务。
之后尝试了as中间去实现音乐播放器,参考第一行代码p303-307。
先写入布局代码,三个按钮用来播放,停止,暂停


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
 android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
 android:paddingRight="@dimen/activity_horizontal_margin"
 android:paddingTop="@dimen/activity_vertical_margin"
 android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

<TextView android:text="音频播放器" android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:id="@+id/textView" />

<LinearLayout
   android:orientation="horizontal"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:layout_below="@+id/textView"
   android:layout_alignParentLeft="true"
   android:layout_alignParentStart="true">

<Button
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:text="播放"
     android:id="@+id/button"
     android:layout_weight="0.33" />

<Button
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:text="停止"
     android:id="@+id/button2"
     android:layout_weight="0.33" />

<Button
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:text="暂停"
     android:id="@+id/button3"
     android:layout_weight="0.33" />
 </LinearLayout>

</RelativeLayout>

android studio 3.0 service项目背景音乐实现

android studio 3.0 service项目背景音乐实现

android studio 3.0 service项目背景音乐实现

android studio 3.0 service项目背景音乐实现

最后将service与音频播放结合,写了一个可以再主界面播放的背景音乐:
此界面一打开就有音乐:

android studio 3.0 service项目背景音乐实现

开发过程学到的邮件发送

这个在上一次的随堂小测中间有用到。


public class Main {
 public static String myEmailAccount = "929585831@qq.com";
 public static String myEmailPassword = "uhszzhgojydfbbec";  // 授权码

public static String myEmailSMTPHost = "smtp.qq.com";

// 收件人邮箱
 public static String receiveMailAccount = "541227688@qq.com";

public static void main(String[] args) throws Exception {
   // 1. 创建参数配置, 用于连接邮件服务器的参数配置
   Properties props = new Properties();          // 参数配置
   props.setProperty("mail.transport.protocol", "smtp");  // 使用的协议(JavaMail规范要求)
   props.setProperty("mail.smtp.host", myEmailSMTPHost);  // 发件人的邮箱的 SMTP 服务器地址
   props.setProperty("mail.smtp.auth", "true");      // 需要请求认证

// SMTP 服务器的端口 ,
   //         需要改为对应邮箱的 SMTP 服务器的端口, 具体可查看对应邮箱服务的帮助,
   //         QQ邮箱的SMTP(SLL)端口为465或587, 其他邮箱自行去查看)
   final String smtpPort = "465";
   props.setProperty("mail.smtp.port", smtpPort);
   props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
   props.setProperty("mail.smtp.socketFactory.fallback", "false");
   props.setProperty("mail.smtp.socketFactory.port", smtpPort);

// 2. 根据配置创建会话对象, 用于和邮件服务器交互
   Session session = Session.getInstance(props);
   session.setDebug(true);                 // 设置为debug模式, 可以查看详细的发送 log

int i=0;                       //写了个小循环舍友连收30份垃圾邮件emmm
   for(i=0;i<30;i++) {
     // 3. 创建一封邮件
     MimeMessage message = createMimeMessage(session, myEmailAccount, receiveMailAccount);

// 4. 根据 Session 获取邮件传输对象
     Transport transport = session.getTransport();

// 5. 使用 邮箱账号 和 密码 连接邮件服务器, 这里认证的邮箱必须与 message 中的发件人邮箱一致, 否则报错
     transport.connect(myEmailAccount, myEmailPassword);

// 6. 发送邮件, 发到所有的收件地址, message.getAllRecipients() 获取到的是在创建邮件对象时添加的所有收件人, 抄送人, 密送人
     transport.sendMessage(message, message.getAllRecipients());

// 7. 关闭连接
     transport.close();

}
 }

/**
  * 创建一封只包含文本的简单邮件
  *
  * @param session 和服务器交互的会话
  * @param sendMail 发件人邮箱
  * @param receiveMail 收件人邮箱
  * @return
  * @throws Exception
  */
 public static MimeMessage createMimeMessage(Session session, String sendMail, String receiveMail) throws Exception {
   // 1. 创建一封邮件
   MimeMessage message = new MimeMessage(session);

// 2. From: 发件人(昵称有广告嫌疑,避免被邮件服务器误认为是滥发广告以至返回失败,请修改昵称)
   message.setFrom(new InternetAddress(sendMail, "you father", "UTF-8"));

// 3. To: 收件人(可以增加多个收件人、抄送、密送)
   message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiveMail, "XX用户", "UTF-8"));

// 4. Subject: 邮件主题(标题有广告嫌疑,避免被邮件服务器误认为是滥发广告以至返回失败,请修改标题)
   message.setSubject("打折钜惠", "UTF-8");

// 5. Content: 邮件正文(可以使用html标签)(内容有广告嫌疑,避免被邮件服务器误认为是滥发广告以至返回失败,请修改发送内容)
   message.setContent("新疆人用户你好,快来买鞋,今天全场5折, 快来抢购, 错过今天再等一年。。。emmm软工实践测试邮件", "text/html;charset=UTF-8");

// 6. 设置发件时间
   message.setSentDate(new Date());

// 7. 保存设置
   message.saveChanges();

return message;
 }

android studio 3.0 service项目背景音乐实现

android studio 3.0 service项目背景音乐实现

如果本文大家还是有没有理解,可以参考另外一篇相关文章:

Android通过startService播放背景音乐

0
投稿

猜你喜欢

  • 一、使用方式可以采用Transactional,配置propagation即可。打开org.springframework.transact
  • 本文实例为大家分享了opencv实现轮廓高斯滤波平滑的具体代码,供大家参考,具体内容如下一个小测试的题目:在图像上点选,找到与点选处相邻的颜
  • using System.Xml;//初始化一个xml实例XmlDocument xml=new XmlDocument();//导入指定x
  • Jmeter接口登录时获取到的参数token一直在变的问题,导致运行时总是报错解决方法如下:1.新建一个GET的HTTP请求2.添加正则表达
  • 原文是 java ,现在将它翻译成 C# ,并对代码重新编排整理,博主是一个今年刚出来的应届毕业生,不足之处请多多包涵。根据银行卡号判断所属
  • Feign调用服务Headers传参在使用springcloud中经常会出现个服务调用,一般情况下会在Headers加上token的验证,那
  • 什么是耦合性耦合性(Coupling),也叫耦合度,是对模块间关联程度的度量。模块间的耦合度是指模块之间的依赖关系,包括控制关系、调用关系、
  • 本文分享了如何对Dubbo服务进行优雅的参数校验,以实现服务端统一的数据返回格式,同时也在一定程度提升开发效率,避免重复简单的参数校验逻辑.
  • 1.数据数据(Data)是外部世界信息的载体, 是能够被计算机识别,加工,存储的。在现实生活中也就是我们的产品原材料。计算机中的数据包括数值
  • 在android开发中,经常会遇到一个view需要它能够支持滑动的需求。下面通过本篇文章给大家介绍android view移动的六种方法。l
  • 目录资源定义好之后,再使用时,可以指定以静态的方式使用资源,还是以动态的方式使用资源。资源我们都会使用了,接下来需要归类整理我们的资源,使用
  • 1、检测权限因为dump系统lsass内存和sam注册表需要管理员权限,所以首先需要对当前进程上下文权限做判断。public static
  • 在我们开发SpringBoot后端服务时,一般需要给前端统一响应格式,方便前端调试及配置错误提示等等。这篇文章讲讲实际工作中统一响应格式及统
  • 一.前言在以前的项目中,很少去关注spring aop的具体实现与理论,只是简单了解了一下什么是aop具体怎么用,看到了一篇博文写得还不错,
  • 之前一直使用各种报表工具,如RDLC、DevExpress套件的XtraReport报表,在之前一些随笔也有介绍,最近接触锐浪的Grid++
  • 一、项目简述(+需求文档+PPT)功能: 主页显示热销商品;所有商品展示,可进行商品搜索;点 击商品进入商品详情页,显示库存,具有立即购买和
  • 提到迭代器我们不能不想到迭代器模式,那我就以迭代器模式作为开场白.在我们的应用程序中常常有这样一些数据结构:它们是一个数据的集合,如果你知道
  • 摘要本文主要讲解mall整合SpringTask的过程,以批量修改超时订单为例。SpringTask是Spring自主研发的轻量级定时任务工
  • public void refresh() throws BeansException, IllegalStateException { &
  • 本文实例讲述了Android编程常用技巧。分享给大家供大家参考,具体如下:1. 登录的时候,如果输入有误,则输入框左右震动,表示输入有误在r
手机版 软件编程 asp之家 www.aspxhome.com