欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2022-06-10 17:09:55
这篇文章是博主在通过学习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播放背景音乐