自从写了第一篇之后,我一直在考虑第二篇该如何写,要是像书本一样一个个介绍下去甚是无味也没这个精力,所以再三思索决定第二篇写个快速入门,让初学者可以迅速上手Android(当然你必须有一定的JAVA基础),然后从下一篇开始就写实际开发中遇到的问题以及一些API的使用方法。言归正传,下面我们就开始今天的介绍:

  打开你的Eclipse,点击File--->New--->Android Project,出现如下界面,我们将项目名叫做:CnBlog:

android入门开发视频教程下载 快速入门android开发_ide

  点击Next,出现如下界面,这里用来选择我们使用的Android版本,这里说下,你所选择的版本决定了你所支持的最低Android ROM的版本,也决定了你可以使用的方法,比如在2.3中出现的新方法,你选择了1.6是无法使用的,如何选择版本取决于你项目的要求,博主选择2.1,因为这可以兼容主流的Android手机。

android入门开发视频教程下载 快速入门android开发_android_02

  选择好之后点击Next,会出现如下页面,这里你可以设置你的包名,我们就设为com.cnblog.activity,让Eclipse自动为我们建一个Activity,我们就不改了,命名为CnBlogActivity,当然你可以改为自己的名字,一般我们都使用某个具有一定意义的单词加Activity结尾。Application Name就是你创建程序后显示的应用程序名。

android入门开发视频教程下载 快速入门android开发_android_03

  设好之后就可以点击完成了,你就可以在Eclipse中看到我们新建的项目:

  

    

android入门开发视频教程下载 快速入门android开发_拨号_04

  在上图我们可以看到一个Android项目的基本结构,src里面存放着我们的源代码,gen中我们可以看到一个R.java的java文件,这个文件是Eclipse给我们自动产生,此文件不需要开发者自行维护。往下看,我们可以看到res资源文件夹,里面有好多的文件夹,以drawable开头的是用来存放图片文件的,后面的h,l,m我想大家猜猜也知道,是用来区分不同分别率的。再看layout文件夹,这里面主要用来存放布局文件,而values文件夹主要用来存放一些常量文件,比如颜色常量和字符串常量。再往下看我们可以看到AndroidManifest.xml,他存储了应用程序的组件和节点,我们写好的Actvity,Service都需要在这里面配置,运行时才可以调用。

  好,下面我们就开始我们第一个项目,启动界面网络检测+调用系统拨号程序:

  首先我们来设计一下启动界面的布局:此处采用的是线性布局,里面有一个ImageView控件和一个TextView控件,至于这些标签的意思我就不再一一细说了,网上这些方面的讲解铺天盖地。

1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="fill_parent"
 4     android:layout_height="fill_parent"
 5     android:orientation="vertical" >
 6 
 7     <ImageView
 8 android:layout_width="fill_parent"
 9         android:layout_height="fill_parent"
10         android:scaleType="fitXY"
11         android:src="@drawable/welcome_logo" />
12 
13     <TextView
14 android:id="@+id/welcome_textview"
15         android:layout_width="wrap_content"
16         android:layout_height="wrap_content"
17         android:layout_gravity="center_horizontal"
18         android:layout_marginTop="-120.0dip"
19         android:text="@string/welcome"
20         android:textColor="@color/white"
21         android:textSize="22.0dip" />
22 
23 </LinearLayout>

  布局完之后我们就可以在我们的CnBlogActivity里面来进行逻辑操作了:

1 package com.cnblog.activity;
 2 
 3 import android.app.Activity;
 4 import android.app.AlertDialog;
 5 import android.app.Dialog;
 6 import android.content.DialogInterface;
 7 import android.content.DialogInterface.OnClickListener;
 8 import android.content.Intent;
 9 import android.os.Bundle;
10 import android.os.Handler;
11 import android.provider.Settings;
12 import android.widget.TextView;
13 
14 import com.cnblog.utils.ProNetworkManager;
15 
16 public class CnBlogActivity extends Activity {
17     private Handler mHandler;
18     private TextView welcomeTextView;
19 
20     @Override
21     public void onCreate(Bundle savedInstanceState) {
22         super.onCreate(savedInstanceState);
23         // 设置Activity的布局
24         setContentView(R.layout.main);
25         // 初始化变量
26         mHandler = new Handler();
27         welcomeTextView = (TextView) findViewById(R.id.welcome_textview);
28         // 网络检测
29         networkCheck();
30     }
31 
32     private void networkCheck() {
33         new Thread(new Runnable() {
34             @Override
35             public void run() {
36                 // 休眠500毫秒
37                 try {
38                     Thread.sleep(500);
39                 } catch (InterruptedException e) {
40                     e.printStackTrace();
41                 }
42                 mHandler.post(new Runnable() {
43                     @Override
44                     public void run() {
45                         welcomeTextView.setText("正在检测网络......");
46                         if (ProNetworkManager.IsExistNet(CnBlogActivity.this)) {
47                             access();
48                         } else {
49                             postDialog();
50                         }
51                     }
52                 });
53             }
54         }).start();
55     }
56 
57     // 进入主界面
58     private void access() {
59         Runnable mDelay = new Runnable() {
60             @Override
61             public void run() {
62                 startActivity(new Intent(CnBlogActivity.this,
63                         HomeActivity.class));
64                 finish();
65             }
66         };
67         mHandler.postDelayed(mDelay, 1000);
68     }
69 
70     // 设置网络提示框
71     private void postDialog() {
72         mHandler.post(new Runnable() {
73             @Override
74             public void run() {
75                 Dialog dialog = new AlertDialog.Builder(CnBlogActivity.this)
76                         .setTitle("注意").setMessage("检测到当前无网络连接,是否进行设置")
77                         .setPositiveButton("设置", new OnClickListener() {
78                             @Override
79                             public void onClick(DialogInterface dialog,
80                                     int which) {
81                                 startActivity(new Intent(
82                                         Settings.ACTION_WIRELESS_SETTINGS));
83                                 finish();
84                             }
85                         }).create();
86                 dialog.show();
87             }
88         });
89     }
90 
91 }

  这个里面涉及到了判断网络的操作,所以我们要在Mainifest文件中添加权限:<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />至于上段代码中涉及到的一些Android API我在这儿就不细讲了,后面有机会会再讲。

  好了,下面我们就来写我们的主界面,拨号程序,我们还是从布局文件开始写:

  

1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="fill_parent"
 4     android:layout_height="fill_parent"
 5     android:orientation="vertical" >
 6 
 7     <TextView 
 8 android:layout_width="fill_parent"
 9         android:layout_height="wrap_content"
10         android:text="@string/phone_num_attention"
11 />
12     
13     <EditText 
14 android:id="@+id/phonenumber_text"
15         android:layout_width="fill_parent"
16         android:layout_height="wrap_content"
17         android:hint="@string/phone_num_attention"
18 />
19     
20     <Button 
21 android:id="@+id/submit_button"
22         android:layout_width="wrap_content"
23         android:layout_height="wrap_content"
24         android:layout_gravity="right"
25         android:text="@string/phone_num_submit"
26 />
27 
28 </LinearLayout>

  很简单的三个组件,文本,编辑框和按钮。好了,在创建一个Activity吧,我把它命名为HomeActivity,注意在Mainifest文件中配置:

1 package com.cnblog.activity;
 2 
 3 import java.util.regex.Matcher;
 4 import java.util.regex.Pattern;
 5 
 6 import android.app.Activity;
 7 import android.content.Intent;
 8 import android.net.Uri;
 9 import android.os.Bundle;
10 import android.os.Handler;
11 import android.view.Gravity;
12 import android.view.View;
13 import android.view.View.OnClickListener;
14 import android.view.Window;
15 import android.widget.Button;
16 import android.widget.EditText;
17 import android.widget.Toast;
18 
19 public class HomeActivity extends Activity {
20     private EditText phoneNumEditText;
21     private Button phoneNumSubmitbButton;
22     private Handler mHandler;
23 
24     @Override
25     protected void onCreate(Bundle savedInstanceState) {
26         requestWindowFeature(Window.FEATURE_NO_TITLE);
27         setContentView(R.layout.home_activity);
28         super.onCreate(savedInstanceState);
29         mHandler = new Handler();
30         phoneNumEditText = (EditText) findViewById(R.id.phonenumber_text);
31         phoneNumSubmitbButton = (Button) findViewById(R.id.submit_button);
32         phoneNumSubmitbButton.setOnClickListener(new OnClickListener() {
33             @Override
34             public void onClick(View v) {
35                 String number = phoneNumEditText.getText().toString();
36                 if (number == null || number.equals("")) {
37                     postTip("请输入电话号码!");
38                 } else if (!checkPhone(number)) {
39                     postTip("请输入正确的电话号码!");
40                 } else {
41                     Intent intent = new Intent(Intent.ACTION_DIAL, Uri
42                             .parse("tel:" + number));
43                     startActivity(intent);
44                     finish();
45                 }
46             }
47         });
48     }
49 
50     private void postTip(final String message) {
51         mHandler.post(new Runnable() {
52             @Override
53             public void run() {
54                 Toast toast = Toast.makeText(HomeActivity.this, message,
55                         Toast.LENGTH_LONG);
56                 toast.setGravity(Gravity.TOP | Gravity.CENTER, 0, 50);
57                 toast.show();
58             }
59         });
60     }
61 
62     public boolean checkPhone(String phone) {
63         Pattern pattern = Pattern
64                 .compile("^[1]([3][0-9]{1}|59|58|88|89)[0-9]{8}$");
65         Matcher matcher = pattern.matcher(phone);
66         if (matcher.matches()) {
67             return true;
68         }
69         return false;
70     }
71 }

  上面的代码主要是对用户的输入进行判断,这里限制必须是11位的电话号码,大家可以根据自己的想法更改。注意哦,这里需要添加调用拨号程序的权限

 <uses-permission android:name="android.permission.CALL_PRIVILEGED" />,我这边使用的是CALL_PRIVILEGED,你也可以使用CALL_PHONE,它会直接拨号,我觉得不太友好,而上一个是调用拨号键盘。下面是Mainifest文件

1 <?xml version="1.0" encoding="utf-8"?>
 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
 3     package="com.cnblog.activity"
 4     android:versionCode="1"
 5     android:versionName="1.0" >
 6 
 7     <uses-sdk android:minSdkVersion="7" />
 8 
 9     <application
10 android:icon="@drawable/ic_launcher"
11         android:label="@string/app_name" >
12         <activity
13 android:label="@string/app_name"
14             android:name=".CnBlogActivity"
15             android:screenOrientation="portrait"
16             android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" >
17             <intent-filter >
18                 <action android:name="android.intent.action.MAIN" />
19 
20                 <category android:name="android.intent.category.LAUNCHER" />
21             </intent-filter>
22         </activity>
23         <activity
24 android:name="HomeActivity"
25             android:screenOrientation="portrait" />
26     </application>
27 
28     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
29     <uses-permission android:name="android.permission.CALL_PRIVILEGED" />
30 
31 </manifest>

  这个标签android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"标明使用全屏模式。

  好了,下面来测试你的程序吧,如果有真机可以直接发布到机子上,如果没有就只有创建模拟器了,由于模拟器创建起来太慢,我就偷个懒不再叙述如何在模拟器中发布了,大家可以参考这个文章:http://book.douban.com/reading/12919079/。好了,咱们下次再续。