第一个mac Android Studio实现APP的例子

安装Android Studio

在网上看了许多的教程,可能世界变化太快,在安装Android Studio时并没有碰到很多的问题。主要一点是当访问google的网站时需要在使用下载和编辑软件时,将比如这个帮助文件的地址中的com部分变为"google.cn"就可以一路畅通无阻了。比如下面是点击Android Studio的帮助中的快速入门网址http://developer.android.com/r/studio-ui/menu-start.html。这个网址变成http://developer.android.google.cn/studio-ui/menu-start.html就可以了。下面是帮助的画面:
在这里插入图片描述

开发一个网络应用的实例

安装完成软件后要开发一个手机或者是PAD的应用。因为当前嵌入式技术发展迅速,市场进步很快,国产的MCU技术水平在不断提升。一个30元以下的控制器可以生成热点,这就为开发手机或者是PAD应用提供了非常灵活的前景。网络技术服务离不开TCP/IP,下面以一个TCP/IP开发应用为例介绍Android Studio的开发。

开发APP

APP的开发非常简单,主要包括下面的步骤:

  1. 生成一个应用,Android Studio会帮助我们完成需要的工作:
    在这里插入图片描述
    我选择了一个Empty Activity的应用。生成的文件及界面是一个有TextView控件的程序。如下:
package com.example.ex6_5;

import android.os.Bundle;
import android.os.StrictMode;
//import android.support.v7.app.AppCompatActivity;
import androidx.appcompat.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import java.io.DataInputStream;
//import java.io.DataOutput;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;

public class MainActivity extends AppCompatActivity {
    
    
    private Socket socket = null;
    private DataInputStream dis = null;
    private DataOutputStream dos = null;
    private TextView mTextView1;
    private Button Button1;
    String msg = "";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mTextView1 = (TextView) findViewById(R.id.textView);
        Button1 = (Button) findViewById(R.id.Button);
        Button1.setOnClickListener(new mClick());
        // 以下为避免NetworkOnMainThreadException异常
       StrictMode.setThreadPolicy(new StrictMode
                .ThreadPolicy
                .Builder()
                .detectDiskWrites()
                .detectDiskReads()
                .detectNetwork()
                .penaltyLog()
                .build());
    }
    class mClick implements View.OnClickListener
    {
    
    
        @Override
        public void onClick(View v)
        {
    
    
            Client();
        }
        public void Client()
        {
    
    
            try
            {
    
    
                socket = new Socket("192.168.2.149", 4321);
            }
            catch (Exception ioe)
            {
    
    
                System.out.print("Socket err");
            }
            try
            {
    
    
               dis = new DataInputStream(socket.getInputStream());
                dos = new DataOutputStream(socket.getOutputStream());
                dos.writeUTF("给我发送数据...");
                dos.flush();
            }
            catch (IOException ioe)
            {
    
    
                System.out.print("DataSteam create err");
            }
            try
            {
    
    
                Thread.sleep(500);
                msg = "手机客户端发来贺电!";
                WriteString(msg);               // 发送数据
                dos.close();
                socket.close();
            }
            catch (Exception ioe)
            {
    
    
                System.out.println("socket close() err ........");
            }
            ReadStr();
        }
        // 写数据到socket,即发送数据
        public void WriteString(String str)
        {
    
    
            try
            {
    
    
                dos.writeUTF(str);
                dos.flush();
                ReadStr();
                socket.close();
            }
            catch (IOException e)
            {
    
    
                System.out.print("WriteString() err");
            }
        }
        // 显示从socket返回的数据,即读取数据
        public void ReadStr()
        {
    
    
            try
            {
    
    
                if ((msg = dis.readUTF()) != null)
                {
    
    
                    mTextView1.append(msg);
                }
            }
            catch (IOException ioe)
            {
    
    
                System.out.print("ReadStr() err");
            }
        }

    }
}

在activity_main.xml中添加一个TextView和一个Button就可以实现这个界面。注意,这一部分的代码是一个TCP/IP的客户端,还要在一个机器上实现TCP/IP服务器。

java TCP/IP服务器

可以用java实现,最简单的事情就是用java实现TCP服务器。随便找一个文字编辑软件,编写一个服务器的程序,用java -version监测一下机器是否安装了java。我的机器安装了java,服务器程序如下:

import java.io.DataOutputStream;
import java.io.DataInputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

import static java.lang.System.in;
import static java.lang.System.out;

public class server
{
    
    
    private ServerSocket ss;
    private Socket socket;
    private DataInputStream dis;
    private DataOutputStream dos;
    private server()
    {
    
    
        new ServerThread().start();
    }
    class ServerThread extends Thread
    {
    
    
        public void run()
        {
    
    
            try
            {
    
    
                ss = new ServerSocket(4321);
                out.println("TCP服务器启动了");
                while(true)
                {
    
    
                    socket = ss.accept();           // 阻塞端口,等待客户端连接
                    out.println("有客户端连接服务器");
                    dis = new DataInputStream(socket.getInputStream());
                    dos = new DataOutputStream(socket.getOutputStream());
                    dos.writeUTF("恭喜你,连接服务器成功!\n");   // 给手机发送一条数据
                    dos.flush();
                    out.println("服务器休眠20秒......");
                    Thread.sleep(500);
                    String msg = "";
                    if ((msg = dis.readUTF()) != null)
                    {
    
    
                        out.println(msg);
                    }
                    dos.writeUTF("你发送来的数据服务器收到了。^ _ ^");
                    dos.flush();
                }

            }
            catch (Exception e)
            {
    
    
                out.println("读写错误");
            }
            finally
            {
    
    
                try
                {
    
    
                    in.close();
                    out.close();
                }
                catch (IOException e)
                {
    
    
                    e.printStackTrace();
                }
            }
        }
    }
    public static void main(String[] args) throws IOException
    {
    
    
        new server();
    }
}

运行APP

可以在模拟器上运行APP,也可以在真实的设备上运行APP,在真实的设备上运行APP没有复杂的操作,用一个USB电缆连接真实设备和mac。一般情况下会自动安装驱动,直接选择这个设备,点击运行就可以下载在真实设备上。运行效果

在这里插入图片描述
手机界面


至此,一个手机APP就实现了。是不是很简单。但我经历了痛苦的过程。真实设备到现在还有一个使用inetAddress的类还在闪退。慢慢来吧,急不得!

おすすめ

転載: blog.csdn.net/weixin_44481398/article/details/101419072