写给后端开发看的安卓入门
可以看也可以不看的序
作为一名计算机专业的学生,总有人会问我,会不会修电脑啦,会不会拉网线啦,会不会做APP啦…
一个老朋友问我说,会不会做APP啊,帮他做一个能群发短信的APP。我想了一下,把网易云短信介绍给了他。
但过了一段时间,他说网易云短信首充要2000块,这也太贵了吧。我只能说贵是贵了点,但是人家服务不错啊,而且市面上首充差不多都这个价。
他不干了,他说他不用那么多的,一次可能就发两三十条。让我帮他做一个,回去请我吃烤串。
我想了一下烤串的味道,于是就有了这篇文章。
好久没碰安卓了,最后一次是帮另个哥们做一个蓝牙控制的APP,还是在豪豪的帮助下才完成的。现在又要重操旧业,那就干脆写成一篇简单的教程。
写的不好,不对的地方欢迎指出。
安卓的一些入门知识
ADT
ADT,全称Android Development Tools。官网的介绍是,Eclipse这个IDE开发Android应用而安装的一个插件。因此,如果你不用Eclipse开发Anroid,那就不用安装了。
SDK
SDK,全称Software development kit,软件开发工具包。一般是一些被软件工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合。
API
API,全称Application Programming Interface,应用程序编程接口。一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件的以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。
Intent
Intent,意图,是Android程序中,各个组件之间进行交互的重要方式,它既可以完成当前Activity的要完成的动作,也可以在不同组件之间传数据。
Android的开发IDE
Eclipse
一开始,我使用的是Eclipse来开发,但是真的,很无奈,Eclipse不适合开发Android吧,一直有大大小小的毛病。如果你要使用Eclipse可能就要自己安装ADT了。如果不用那就只要下载SDK就行。
IDEA
没有试过,但是我的IDEA为了开发后端的速度,而特地去掉了很多插件,没有安卓环境,感觉应该和Android Studio差不多。
Android Studio
好了,就用它吧,Android是Google的亲儿子,而Android Studio是基于JetBrains IntelliJ IDEA,为Android开发特殊定制。安装后,配置一下SDK,或者不配也行,直接就能用了。
开发一个APP的过程
初始化
开启Android之后,将会这样的一个界面。然后点击Start a new Android Studio project 。
进入这个界面,我们把必要的内容填一下。
选择Empty Activity。
一直next,直到把项目Finish。
然后静静等项目初始化完成。
进入的界面如图
我点开的是意味着,你可以选择不同的视图模式。一般,应该是Android吧。
文件分布
主要用到的是这三个文件类。其实还有一些文件,也是有用,但是是辅助,比如说values放的是一些值,像@color/bule 这样的引用。
发短信的功能
权限
要想在Android上进行开发,就要记住需要用到系统的东西时,要加上权限。
比如说发短信的权限。
<uses-permission android:name="android.permission.SEND_SMS"/>
加到AndroidManifest.xml中<appliction>...</appliction>
上面。
这样,我们就能申请手机的短信权限。
界面
因为只是简单的做,所以,我就只是加一个button算了。
我们可以进入这个界面
其实,安卓在我心中,算是控件类编程。以前也做过C++的MVC和C#的Winform和WPF,也做过Java的界面,做过WE(魔兽)的编程。因此只是简单的使用,所以,我也没有多大的美化,反正套路就是,拉控件写监听的监听器,完工。
我们,先拉一个Button到界面上。
点击回到Text中,我们就能看到
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.web.chen.mymessage.MainActivity"
android:weightSum="1">
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="发送"
android:id="@+id/button_send"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_weight="0.29" />
</LinearLayout>
Activity
我们点开MainActivity.java
初始化为
package com.web.chen.mymessage;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
首先我们加入,对Button的引用,文件变这样。
package com.web.chen.mymessage;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//添加的代码
Button btnSend=(Button)findViewById(R.id.btn_send);
btnSend.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//点击的监听事件
}
});
}
}
其中findViewById就是找到这个按钮, setOnClickListener就是监听事件。
比如说我们可以添加一个点击了就让手机显示你好的问候,那么我们就可以加入
Toast.makeText(MainActivity.this,"你好",Toast.LENGTH_SHORT).show();
这样在我们点击发送之后就会有“你好”弹出。
但这不是我们要的,我们要的是发短信,所以代码如下:
package com.web.chen.mymessage;
import android.app.PendingIntent;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//短信
final SmsManager smsManager=SmsManager.getDefault();
final PendingIntent sentIntent = PendingIntent.getBroadcast(MainActivity.this, 0, new Intent(), 0);
//发送按钮
Button btnSend=(Button)findViewById(R.id.btn_send);
btnSend.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//点击的监听事件
smsManager.sendTextMessage("15521381251",null,"你好",sentIntent,null);
Toast.makeText(MainActivity.this,"你好",Toast.LENGTH_SHORT).show();
}
});
}
}
一个可以发短信的按钮就开发完成了。
选择文件
在手机中我们有时候需要选择一些文件进行操作。因此,我们需要系统的意图。因此代码如下
Intent intent = new Intent();
intent.setAction(Intent.ACTION_GET_CONTENT);
intent.setType("*/*");
intent.addCategory(Intent.CATEGORY_OPENABLE);
startActivityForResult(Intent.createChooser(intent, "选择一个文件"), 2);
在安卓中当选中后将会有一个回调函数,这个函数编写如下
/**
* 意图的回调函数
* @param requestCode 请求码
* @param resultCode 响应码
* @param data 数据
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 2 && resultCode == Activity.RESULT_OK) {
Uri contentUri = data.getData();
fileName = contentUri.getEncodedPath();
Toast.makeText(MainActivity.this, "已经成功读取" + fileName, Toast.LENGTH_SHORT).show();
}
}
然后我们就可以对文件进行操作了
跳转
第一个页面
package com.example.chen.myapplication;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
/**
* Created by CHEN on 2017/1/11.
*/
public class FActivity extends Activity{
private Button bt1;
private Button bt2;
private TextView textView;
/**
* 创建页面
* @param savedInstanceState
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.factivity);
bt1=(Button) findViewById(R.id.button2);
//通过点击bt1 实现页面之间的跳转
bt1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// private Context context 全局变量赋值 传参
Intent intent=new Intent(FActivity.this,SActivity.class);
startActivity(intent);
}
});
bt2=(Button) findViewById(R.id.button3) ;
bt2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(FActivity.this,SActivity.class);
//第一个是intent对象
//第二个是一个请求的标志
startActivityForResult(intent,1);
}
});
textView=(TextView) findViewById(R.id.textView);
}
/**
* startActivityForResult
* requuestCode 请求的标识 ,如1
* resultCode 哪个页面返回的数据
* data 是第二个页面的回传数据
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==1&&resultCode==1) {
String content =data.getStringExtra("content");
Toast.makeText(FActivity.this,content,Toast.LENGTH_SHORT).show();
textView.setText(content);
}
}
}
第二个页面
package com.example.chen.myapplication;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
/**
* Created by CHEN on 2017/1/11.
*/
public class SActivity extends Activity {
private Button bt;
private String content="你好";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.sactivity);
//被动式的回传
bt=(Button)findViewById(R.id.button4);
bt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent data=new Intent();//只是回传 不订目标
data.putExtra("content",content);//和我们的request.getParameter一样
setResult(1,data);//结果码 标识这个页面
finish();//结束当前页面
}
});
}
}