安装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的开发非常简单,主要包括下面的步骤:
- 生成一个应用,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的类还在闪退。慢慢来吧,急不得!