zoukankan      html  css  js  c++  java
  • 个人技术博客Alpha----Android Studio学习

    项目联系:

    本次项目我主要负责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>
    

    最后将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;
        }
    

  • 相关阅读:
    灌溉 最小生成树
    queue的应用uva540
    大数相加
    对于jquery实现原理的浅谈
    div+CSS实现页面的布局要点记录
    spring注解注入的学习
    jsp内置对象学习记录
    web应用的乱码解决
    新发现:排序算法时间复杂度只有O(3n),命名为"wgw"排序法
    java编写的Http协议的多线程下载器
  • 原文地址:https://www.cnblogs.com/nnmaitian/p/7844734.html
Copyright © 2011-2022 走看看