首页 > 系统 > Android > 正文

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

2019-10-22 18:22:58
字体:
来源:转载
供稿:网友

这篇文章是博主在通过学习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,service,背景音乐

android,studio,service,背景音乐

android,studio,service,背景音乐

android,studio,service,背景音乐

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

android,studio,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,service,背景音乐

android,studio,service,背景音乐

 


注:相关教程知识阅读请移步到Android开发频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表