项目联系:

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

开发基础之Service

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

  1. package com.example.lhb.startservice;  
  2.   
  3. import android.app.Service;  
  4. import android.content.Intent;  
  5. import android.os.IBinder;  
  6. import android.view.ViewDebug;  
  7. import android.widget.Toast;  
  8.   
  9. public class MyService extends Service {  
  10.     private boolean Running=false;  
  11.     private String data="默认信息!!!";  
  12.     public MyService() {  
  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 int onStartCommand(Intent intent, int flags, int startId) {   
  23.         data=intent.getStringExtra("data");//这里的intent是参数里的,不是自定义的  
  24.         return super.onStartCommand(intent, flags, startId);  
  25.     }  
  26.   
  27.     @Override  
  28.     public void onCreate() {  
  29.         super.onCreate();  
  30.         Running=true;  
  31.         new Thread(){  
  32.             @Override  
  33.             public void run() {  
  34.                 super.run();  
  35.                 while (Running){  
  36.                     System.out.println(data);  
  37.                     try {  
  38.                         sleep(3000);  
  39.                     } catch (InterruptedException e) {  
  40.                         e.printStackTrace();  
  41.                     }  
  42.                 }  
  43.             }  
  44.         }.start();  
  45.     }  
  46.   
  47.     @Override  
  48.     public void onDestroy() {  
  49.         super.onDestroy();  
  50.         Running=false;  
  51.     }  
  52. }  
  53. //主代码
  54. package com.example.lhb.startservice;  
  55.   
  56. import android.content.Intent;  
  57. import android.support.v7.app.ActionBarActivity;  
  58. import android.os.Bundle;  
  59. import android.view.Menu;  
  60. import android.view.MenuItem;  
  61. import android.view.View;  
  62. import android.widget.EditText;  
  63. import android.widget.Toast;  
  64.   
  65.   
  66. public class MainActivity extends ActionBarActivity {  
  67.     private EditText inputText;  
  68.   
  69.     @Override  
  70.     protected void onCreate(Bundle savedInstanceState) {  
  71.         super.onCreate(savedInstanceState);  
  72.         setContentView(R.layout.activity_main);  
  73.   
  74.         findViewById(R.id.btnStartService).setOnClickListener(new View.OnClickListener() {  
  75.             @Override  
  76.             public void onClick(View v) {  
  77.                 inputText= (EditText) findViewById(R.id.inputText);  
  78.                 if(inputText.getText().length()==0){  
  79.                     Toast.makeText(MainActivity.this,"请输入传递的值!",Toast.LENGTH_SHORT).show();  
  80.                     return;  
  81.                 }  
  82.                 Intent intent;  
  83.                 intent=new Intent(MainActivity.this,MyService.class);  
  84.                 intent.putExtra("data",inputText.getText().toString());  
  85.                 startService(intent);  
  86.             }  
  87.         });  
  88.   
  89.         findViewById(R.id.btnStopService).setOnClickListener(new View.OnClickListener() {  
  90.             @Override  
  91.             public void onClick(View v) {  
  92.                 Intent intent;  
  93.                 intent=new Intent(MainActivity.this,MyService.class);  
  94.                 stopService(intent);  
  95.             }  
  96.         });  
  97.     }  
  98. }  

以此来完成Activity向Service传递数据的任务。

之后尝试了as中间去实现音乐播放器,参考第一行代码p303-307。

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

  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2.     xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
  3.     android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
  4.     android:paddingRight="@dimen/activity_horizontal_margin"
  5.     android:paddingTop="@dimen/activity_vertical_margin"
  6.     android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
  7.     <TextView android:text="音频播放器" android:layout_width="match_parent"
  8.         android:layout_height="wrap_content"
  9.         android:id="@+id/textView" />
  10.     <LinearLayout
  11.         android:orientation="horizontal"
  12.         android:layout_width="fill_parent"
  13.         android:layout_height="fill_parent"
  14.         android:layout_below="@+id/textView"
  15.         android:layout_alignParentLeft="true"
  16.         android:layout_alignParentStart="true">
  17.         <Button
  18.             android:layout_width="wrap_content"
  19.             android:layout_height="wrap_content"
  20.             android:text="播放"
  21.             android:id="@+id/button"
  22.             android:layout_weight="0.33" />
  23.         <Button
  24.             android:layout_width="wrap_content"
  25.             android:layout_height="wrap_content"
  26.             android:text="停止"
  27.             android:id="@+id/button2"
  28.             android:layout_weight="0.33" />
  29.         <Button
  30.             android:layout_width="wrap_content"
  31.             android:layout_height="wrap_content"
  32.             android:text="暂停"
  33.             android:id="@+id/button3"
  34.             android:layout_weight="0.33" />
  35.     </LinearLayout>
  36. </RelativeLayout>

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

此界面一打开就有音乐:

开发过程学到的邮件发送

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

  1. public class Main {
  2. public static String myEmailAccount = "929585831@qq.com";
  3. public static String myEmailPassword = "uhszzhgojydfbbec"; // 授权码
  4. public static String myEmailSMTPHost = "smtp.qq.com";
  5. // 收件人邮箱
  6. public static String receiveMailAccount = "541227688@qq.com";
  7. public static void main(String[] args) throws Exception {
  8. // 1. 创建参数配置, 用于连接邮件服务器的参数配置
  9. Properties props = new Properties(); // 参数配置
  10. props.setProperty("mail.transport.protocol", "smtp"); // 使用的协议(JavaMail规范要求)
  11. props.setProperty("mail.smtp.host", myEmailSMTPHost); // 发件人的邮箱的 SMTP 服务器地址
  12. props.setProperty("mail.smtp.auth", "true"); // 需要请求认证
  13. // SMTP 服务器的端口 ,
  14. // 需要改为对应邮箱的 SMTP 服务器的端口, 具体可查看对应邮箱服务的帮助,
  15. // QQ邮箱的SMTP(SLL)端口为465或587, 其他邮箱自行去查看)
  16. final String smtpPort = "465";
  17. props.setProperty("mail.smtp.port", smtpPort);
  18. props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
  19. props.setProperty("mail.smtp.socketFactory.fallback", "false");
  20. props.setProperty("mail.smtp.socketFactory.port", smtpPort);
  21. // 2. 根据配置创建会话对象, 用于和邮件服务器交互
  22. Session session = Session.getInstance(props);
  23. session.setDebug(true); // 设置为debug模式, 可以查看详细的发送 log
  24. int i=0; //写了个小循环舍友连收30份垃圾邮件emmm
  25. for(i=0;i<30;i++) {
  26. // 3. 创建一封邮件
  27. MimeMessage message = createMimeMessage(session, myEmailAccount, receiveMailAccount);
  28. // 4. 根据 Session 获取邮件传输对象
  29. Transport transport = session.getTransport();
  30. // 5. 使用 邮箱账号 和 密码 连接邮件服务器, 这里认证的邮箱必须与 message 中的发件人邮箱一致, 否则报错
  31. transport.connect(myEmailAccount, myEmailPassword);
  32. // 6. 发送邮件, 发到所有的收件地址, message.getAllRecipients() 获取到的是在创建邮件对象时添加的所有收件人, 抄送人, 密送人
  33. transport.sendMessage(message, message.getAllRecipients());
  34. // 7. 关闭连接
  35. transport.close();
  36. }
  37. }
  38. /**
  39. * 创建一封只包含文本的简单邮件
  40. *
  41. * @param session 和服务器交互的会话
  42. * @param sendMail 发件人邮箱
  43. * @param receiveMail 收件人邮箱
  44. * @return
  45. * @throws Exception
  46. */
  47. public static MimeMessage createMimeMessage(Session session, String sendMail, String receiveMail) throws Exception {
  48. // 1. 创建一封邮件
  49. MimeMessage message = new MimeMessage(session);
  50. // 2. From: 发件人(昵称有广告嫌疑,避免被邮件服务器误认为是滥发广告以至返回失败,请修改昵称)
  51. message.setFrom(new InternetAddress(sendMail, "you father", "UTF-8"));
  52. // 3. To: 收件人(可以增加多个收件人、抄送、密送)
  53. message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiveMail, "XX用户", "UTF-8"));
  54. // 4. Subject: 邮件主题(标题有广告嫌疑,避免被邮件服务器误认为是滥发广告以至返回失败,请修改标题)
  55. message.setSubject("打折钜惠", "UTF-8");
  56. // 5. Content: 邮件正文(可以使用html标签)(内容有广告嫌疑,避免被邮件服务器误认为是滥发广告以至返回失败,请修改发送内容)
  57. message.setContent("新疆人用户你好,快来买鞋,今天全场5折, 快来抢购, 错过今天再等一年。。。emmm软工实践测试邮件", "text/html;charset=UTF-8");
  58. // 6. 设置发件时间
  59. message.setSentDate(new Date());
  60. // 7. 保存设置
  61. message.saveChanges();
  62. return message;
  63. }

个人技术博客Alpha----Android Studio学习的更多相关文章

  1. 个人技术博客(alpha)

    APP的权限校验不同于web网页端,web一般使用session记录用户的状态信息,而app则使用token令牌来记录用户信息.有这样一个场景,系统的数据量达到千万级,需要几台服务器部署,当一个用户在 ...

  2. 【新版】Android技术博客精华汇总

    [新版]Android技术博客精华汇总(原文链接内持续更新) http://www.apkbus.com/thread-313856-1-1.html Kotlin Kotlin学习资料汇总 http ...

  3. 个人技术博客(α)------javaweb的学习路程

    该博文大致内容是学习的一个过程,心得,并不是以技术博客为主,在此说明. 关于javaweb的学习开始的时间大概是从大二下(2017年6.7月份)的暑假开始的,在学长的介绍下加入了实验室进行学习,由于是 ...

  4. [技术博客]Android 开发 Bug Log

    [技术博客] Android 开发 Bug Log 大大小小的bug,聪明的愚蠢的都有, 持续记录中...... java.lang.IllegalArgumentException: The sty ...

  5. 多IDC数据分布--MySQL多机房部署 - 学习笔记 - 51CTO技术博客

    多IDC数据分布--MySQL多机房部署 - 学习笔记 - 51CTO技术博客 多IDC数据分布--MySQL多机房部署

  6. [技术博客] Android 自动化测试

    [技术博客] Android 自动化测试 安卓自动化测试工具与平台的搭建 类似于网页端自动化,安卓测试的自动化也主要是针对控件的自动化.其原理就是通过python(其他语言) 的脚本来代替我们手动完成 ...

  7. 全流程指导Visual Studio Code+Markdown Nice+gitee+PicGo管理自己的技术博客文章

    全流程指导Visual Studio Code+Markdown Nice+gitee+PicGo管理自己的技术博客 1.背景 我挺喜欢写博客,但每一次将博客转移到公众号或者知乎,总是需要调整格式,不 ...

  8. [福大软工] Z班——个人技术博客评分

    个人技术博客 作业地址 https://edu.cnblogs.com/campus/fzu/SoftwareEngineering2015/homework/1070 作业要求 个人技术博客单次作业 ...

  9. 转: BAT等研发团队的技术博客

    BAT 技术团队博客   1. 美团技术团队博客:  地址: http://tech.meituan.com/ 2. 腾讯社交用户体验设计(ISUX) 地址:http://isux.tencent.c ...

  10. IT技术博客收藏

    1. coolshell.cn 特点: 每篇都是精品 2. 云风 特点: 3. 阮一峰的博客 特点:高精深 3. offbye涛声依旧-全端技术博客 特点: android的开发技术比较多,非常值得一 ...

随机推荐

  1. tls1.2 rfc5246

    注:本文省略了部分开发协议才涉及到的内容,如字段类型的定义以及字段长度的运算,主要聚焦理解tls协议的运作方式,用于问题定位 tls协议包含2层协议:TLS Record 协议和TLS Handsha ...

  2. VM虚拟机扩展硬盘容量

    VM虚拟机扩展硬盘容量 第一步,关闭系统,给虚拟机硬盘增加空间. 第二步,启动系统.查看硬盘大小和分区情况. 第三步,分区. 第四步,格式化分区. 第五步,挂载. 第六步,开机自动挂载. 第一步: 当 ...

  3. mysql格式化时间戳为日期

    MySQL中有一个像PHP的date函数一样的日期格式化函数DATE_FORMAT,使用这个函数时,需要像下面例子这样传递一个格式字符串和时间戳 SELECT DATE_FORMAT(NOW(),&q ...

  4. JavaWeb学习 (十四)————JSP基础语法

    一.JSP模版元素 JSP页面中的HTML内容称之为JSP模版元素.  JSP模版元素定义了网页的基本骨架,即定义了页面的结构和外观. 二.JSP表达式 JSP脚本表达式(expression)用于将 ...

  5. .Net Core项目添加日志功能

    一.微软内置的日志组件 在.Net Core中使用模板新建的Web Api项目时,会自动加入日志功能.只需要在控制器中注入ILogger就可以了.命名空间为:Microsoft.Extensions. ...

  6. 单例模式写MySQL model类,简单的增、删、改、查

    单例模式的用途,可用于数据库操作 <?php Class Db { static private $whe;//条件 static private $tab;//表名 static privat ...

  7. gulp报错task function must be specified

    1.我npm安装了Browserify,tsify和vinyl-source-stream包,想要引用安装的插件,所以就走了引用插件的流程,修改了gulpfiles.js文件,引用流程完毕后,在终端g ...

  8. 【学习笔记】深入理解HTTP协议

    参考:关于HTTP协议,一篇就够了,感谢作者认真细致的总结,本文在理解的基础上修改了内容,加深印象的同时也希望对大家有所帮助 HTTP是什么? HTTP协议是Hyper Text Transfer P ...

  9. Linux卸载搭建环境

    本章内容 卸载Apache PHP MySQL 卸载Apache 查看apache安装版本 $ apachectl -v 查看安装httpd相关软件包(红色部分) sudo yum list inst ...

  10. instanceof和typeof的细节

    我骑着小毛驴,喝着大红牛哇,哩个啷格里格朗,别问我为什么这木开心,如果活着不是为了浪荡那将毫无意义 今天来捋一捋我们平日经常用的instanceof和typeof的一些小问题 typeof: type ...