背景音乐 android 主机,android studio 3.0 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。

先写入布局代码,三个按钮用来播放,停止,暂停

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">

android:layout_height="wrap_content"

android:id="@+id/textView" />

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">

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="播放"

android:id="@+id/button"

android:layout_weight="0.33" />

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="停止"

android:id="@+id/button2"

android:layout_weight="0.33" />

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="暂停"

android:id="@+id/button3"

android:layout_weight="0.33" />

c9d60a05dc2eee60656a8895e725f0fb.png

5cb175d129939216ebff79339a55013c.png

8db5fa9e896fc0bb32e2337e13581b00.png

6df46bee718cc8fe1b7cefeaf7557e60.png

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

此界面一打开就有音乐:

42da099db6d12489f7c69e20d4ee06fc.png

开发过程学到的邮件发送

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

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;

}

4cbaf8fd1258d2f867c7aef95b4be435.png

ad762723c8adeced143bda2684ebd5b7.png

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值