1、sdk到tool目录配置到path中后,通过android -h命令来查看是否sdk安装成功。
apk文件放tool目录下

命令行到tool目录下

加载apk文件:adb install android_apk_name.apk


卸载apk文件:adb shell         
                  cd data
                  cd app
                  rm -r android_apk_name.apk
如果卸载出现问题用下面的命令
  1.$adb kill-server
  2.$adb start-server
  如果您想测试deamon是否在运行,输入:$adb shell
  卸载你测试应用做法是
  $adb shell rm your_application.apk

 

LinearLayout  讲自己包含的子元素安照一个方向进行排列方向有两种,水平或者竖直,通过Android:orientation=“vertical”或“horizontal”来实现,所以的元素排列都是一个接一个的。

FrameLayout 屏幕上提前预定的空白区域,然后可以填充一些元素到里边,所以的元素都被放置在区域最左上的区域。无法为这些元素指定
一个确切的位置。如果有过个元素,那么后边的元素的显示会重叠在前一个元素上。

TableLayout 表格布局,把包含的元素以行和列进行排列。表格的列数为每一行的最大列数。


 

1. public void onCreate(Bundle savedInstanceState) {
2. super.onCreate(savedInstanceState);
3. LinearLayout layoutMain = new LinearLayout(this);
4. layoutMain.setOrientation(LinearLayout.HORIZONTAL);
5. setContentView(layoutMain);
6. LayoutInflater inflate = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
7. RelativeLayout layoutLeft = (RelativeLayout) inflate.inflate(
8. R.layout.left, null);
9. RelativeLayout layoutRight = (RelativeLayout) inflate.inflate(
10. R.layout.right, null);
11. 
12. RelativeLayout.LayoutParams relParam = new RelativeLayout.LayoutParams(
13. RelativeLayout.LayoutParams.WRAP_CONTENT,
14. RelativeLayout.LayoutParams.WRAP_CONTENT);
15. layoutMain.addView(layoutLeft, 100, 100);//第一个参数是添加进去的view,第二个是view的高度,第三个参数是view的宽度
16. layoutMain.addView(layoutRight, relParam);
17. }
setTitle(“”) 设置标题很独立在代码中。
setContentView(R。layout。main)负责当前的Activity与布局xml文件相关联。
Android:id 是这个组件的唯一标识,通过findViewById(R。id。xxx)来找到,后强制转换成相应的组件。

Android:textSize 设置字体大小,Android:padding 设置组件周围空隙大小,android:textColor设置字体的颜色,android:text设置显示值 
 
SQLiteDataBase

一个SQLiteDataBase的实例代表了一个SQLite的数据库,通过SQLiteDataBase实例的一些方法,我们可以执行SQL语句,对数据库进行增、删、改、查等操作。需要注意的是有一个应用来说是私有的,并且在一个应用中,数据库的名字也是唯一的。

SQLiteOpenHelper

这个类主要是生成一个数据库,并对数据库的版本进行管理。当在程序中调用这个类的方法getWritableDatabase()或者getReadableDatabase()方法的时候,如果当时没有数据,那么Android系统就会自动生成一个数据库。SQLiteOpenHelper是一个抽象类,我们需要继承它,并且实现里面三个方法具体函数如下:
onCreate(SQLiteDataBase)在数据库第一次生成的时候会调用这个方法,一般我们在这个方法里边生成数据库表。
onUpgrade(SQLiteDataBase,int,int)当数据库需要升级的时候,Android系统会主动的调用这个方法。一般我们在这个方法里边删除数据表,并建立新的数据表,是否还需要做其他的操作,完全取决于应用的需要。
onOpen(SQLiteDataBase)这个是打开数据时的回调函数,一般不会用到。

Cursor

接口,通过Cursor我们可以对从数据库查询出来的结果集进行随机的读写访问。 
 
1. package com.ex08_1.SQLite;
2. 
3. import android.app.Activity;
4. import android.content.Context;
5. import android.database.Cursor;
6. import android.database.SQLException;
7. import android.database.sqlite.SQLiteDatabase;
8. import android.database.sqlite.SQLiteOpenHelper;
9. import android.os.Bundle;
10. import android.util.Log;
11. import android.view.View;
12. import android.view.View.OnClickListener;
13. import android.widget.Button;
14. 
15. public class ActivityMain extends Activity {
16. OnClickListener listener1 = null;
17. OnClickListener listener2 = null;
18. OnClickListener listener3 = null;
19. OnClickListener listener4 = null;
20. OnClickListener listener5 = null;
21. 
22. Button button1;
23. Button button2;
24. Button button3;
25. Button button4;
26. Button button5;
27. 
28. DatabaseHelper mOpenHelper;
29. 
30. private static final String DATABASE_NAME = "dbForTest.db";
31. private static final int DATABASE_VERSION = 1;
32. private static final String TABLE_NAME = "diary";
33. private static final String TITLE = "title";
34. private static final String BODY = "body";
35. 
36. private static class DatabaseHelper extends SQLiteOpenHelper {
37. DatabaseHelper(Context context) {
38. super(context, DATABASE_NAME, null, DATABASE_VERSION);
39. }
40. 
41. @Override
42. public void onCreate(SQLiteDatabase db) {
43. 
44. String sql = "CREATE TABLE " + TABLE_NAME + " (" + TITLE
45. + " text not null, " + BODY + " text not null " + ");";
46. Log.i("haiyang:createDB=", sql);
47. db.execSQL(sql);
48. 
49. }
50. 
51. @Override
52. public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
53. }
54. }
55. 
56. @Override
57. public void onCreate(Bundle savedInstanceState) {
58. super.onCreate(savedInstanceState);
59. setContentView(R.layout.main);
60. prepareListener();
61. initLayout();
62. mOpenHelper = new DatabaseHelper(this);
63. 
64. }
65. 
66. private void initLayout() {
67. button1 = (Button) findViewById(R.id.button1);
68. button1.setOnClickListener(listener1);
69. 
70. button2 = (Button) findViewById(R.id.button2);
71. button2.setOnClickListener(listener2);
72. 
73. button3 = (Button) findViewById(R.id.button3);
74. button3.setOnClickListener(listener3);
75. button4 = (Button) findViewById(R.id.button4);
76. button4.setOnClickListener(listener4);
77. 
78. button5 = (Button) findViewById(R.id.button5);
79. button5.setOnClickListener(listener5);
80. 
81. }
82. 
83. private void prepareListener() {
84. listener1 = new OnClickListener() {
85. public void onClick(View v) {
86. CreateTable();
87. }
88. };
89. listener2 = new OnClickListener() {
90. public void onClick(View v) {
91. dropTable();
92. }
93. };
94. listener3 = new OnClickListener() {
95. public void onClick(View v) {
96. insertItem();
97. }
98. };
99. listener4 = new OnClickListener() {
100. public void onClick(View v) {
101. deleteItem();
102. }
103. };
104. listener5 = new OnClickListener() {
105. public void onClick(View v) {
106. showItems();
107. }
108. };
109. }
110. 
111. /*
112. * 重新建立数据表
113. */
114. private void CreateTable() {
115. SQLiteDatabase db = mOpenHelper.getWritableDatabase();
116. String sql = "CREATE TABLE " + TABLE_NAME + " (" + TITLE
117. + " text not null, " + BODY + " text not null " + ");";
118. Log.i("haiyang:createDB=", sql);
119. 
120. try {
121. db.execSQL("DROP TABLE IF EXISTS diary");
122. db.execSQL(sql);
123. setTitle("数据表成功重建");
124. } catch (SQLException e) {
125. setTitle("数据表重建错误");
126. }
127. }
128. 
129. /*
130. * 删除数据表
131. */
132. private void dropTable() {
133. SQLiteDatabase db = mOpenHelper.getWritableDatabase();
134. String sql = "drop table " + TABLE_NAME;
135. try {
136. db.execSQL(sql);
137. setTitle("数据表成功删除:" + sql);
138. } catch (SQLException e) {
139. setTitle("数据表删除错误");
140. }
141. }
142. 
143. /*
144. * 插入两条数据
145. */
146. private void insertItem() {
147. SQLiteDatabase db = mOpenHelper.getWritableDatabase();
148. String sql1 = "insert into " + TABLE_NAME + " (" + TITLE + ", " + BODY
149. + ") values('haiyang', 'android的发展真是迅速啊');";
150. String sql2 = "insert into " + TABLE_NAME + " (" + TITLE + ", " + BODY
151. + ") values('icesky', 'android的发展真是迅速啊');";
152. try {
153. Log.i("haiyang:sql1=", sql1);
154. Log.i("haiyang:sql2=", sql2);
155. db.execSQL(sql1);
156. db.execSQL(sql2);
157. setTitle("插入两条数据成功");
158. } catch (SQLException e) {
159. setTitle("插入两条数据失败");
160. }
161. }
162. 
163. /*
164. * 删除其中的一条数据
165. */
166. private void deleteItem() {
167. try {
168. SQLiteDatabase db = mOpenHelper.getWritableDatabase();
169. db.delete(TABLE_NAME, " title = 'haiyang'", null);
170. setTitle("删除title为haiyang的一条记录");
171. } catch (SQLException e) {
172. 
173. }
174. 
175. }
176. 
177. /*
178. * 在屏幕的title区域显示当前数据表当中的数据的条数。
179. */
180. private void showItems() {
181. 
182. SQLiteDatabase db = mOpenHelper.getReadableDatabase();
183. String col[] = { TITLE, BODY };
184. Cursor cur = db.query(TABLE_NAME, col, null, null, null, null, null);
185. Integer num = cur.getCount();
186. setTitle(Integer.toString(num) + " 条记录");
187. }
188. }
ContentValues
利用ContentValues来代替原来SQL语句进行数据库的操作。ContentValues存储值都只能是基本类型。

SimpleCursorAdapter
SimpleCursorAdapter类和ListView配合进行ListView的显示。

封装SQLiteDatabase,让访问数据更加方便和安全。

重点方法介绍:renderListView()1. package com.eoeAndroid.SQLite;
2. 
3. import android.app.ListActivity;
4. import android.content.Intent;
5. import android.database.Cursor;
6. import android.os.Bundle;
7. import android.view.Menu;
8. import android.view.MenuItem;
9. import android.view.View;
10. import android.widget.ListView;
11. import android.widget.SimpleCursorAdapter;
12. 
13. /**
14. * @author jinyan
15. * 
16. */
17. public class ActivityMain extends ListActivity {
18. private static final int ACTIVITY_CREATE = 0;
19. private static final int ACTIVITY_EDIT = 1;
20. 
21. private static final int INSERT_ID = Menu.FIRST;
22. private static final int DELETE_ID = Menu.FIRST + 1;
23. 
24. private DiaryDbAdapter mDbHelper;
25. private Cursor mDiaryCursor;
26. 
27. @Override
28. public void onCreate(Bundle savedInstanceState) {
29. super.onCreate(savedInstanceState);
30. setContentView(R.layout.diary_list);
31. mDbHelper = new DiaryDbAdapter(this);
32. mDbHelper.open();
33. renderListView();
34. 
35. }
36. 
37. private void renderListView() {
38. mDiaryCursor = mDbHelper.getAllNotes();
39. startManagingCursor(mDiaryCursor);
40. String[] from = new String[] { DiaryDbAdapter.KEY_TITLE,
41. DiaryDbAdapter.KEY_CREATED };
42. int[] to = new int[] { R.id.text1, R.id.created };
43. SimpleCursorAdapter notes = new SimpleCursorAdapter(this,
44. R.layout.diary_row, mDiaryCursor, from, to);
45. setListAdapter(notes);
46. }
47. 
48. @Override
49. public boolean onCreateOptionsMenu(Menu menu) {
50. super.onCreateOptionsMenu(menu);
51. menu.add(0, INSERT_ID, 0, R.string.menu_insert);
52. menu.add(0, DELETE_ID, 0, R.string.menu_delete);
53. return true;
54. }
55. 
56. @Override
57. public boolean onMenuItemSelected(int featureId, MenuItem item) {
58. switch (item.getItemId()) {
59. case INSERT_ID:
60. createDiary();
61. return true;
62. case DELETE_ID:
63. mDbHelper.deleteDiary(getListView().getSelectedItemId());
64. renderListView();
65. return true;
66. }
67. return super.onMenuItemSelected(featureId, item);
68. }
69. 
70. private void createDiary() {
71. Intent i = new Intent(this, ActivityDiaryEdit.class);
72. startActivityForResult(i, ACTIVITY_CREATE);
73. }
74. 
75. @Override
76. // 需要对position和id进行一个很好的区分
77. // position指的是点击的这个ViewItem在当前ListView中的位置
78. // 每一个和ViewItem绑定的数据,肯定都有一个id,通过这个id可以找到那条数据。
79. protected void onListItemClick(ListView l, View v, int position, long id) {
80. super.onListItemClick(l, v, position, id);
81. Cursor c = mDiaryCursor;
82. c.moveToPosition(position);
83. Intent i = new Intent(this, ActivityDiaryEdit.class);
84. i.putExtra(DiaryDbAdapter.KEY_ROWID, id);
85. i.putExtra(DiaryDbAdapter.KEY_TITLE, c.getString(c
86. .getColumnIndexOrThrow(DiaryDbAdapter.KEY_TITLE)));
87. i.putExtra(DiaryDbAdapter.KEY_BODY, c.getString(c
88. .getColumnIndexOrThrow(DiaryDbAdapter.KEY_BODY)));
89. startActivityForResult(i, ACTIVITY_EDIT);
90. }
91. 
92. @Override
93. protected void onActivityResult(int requestCode, int resultCode,
94. Intent intent) {
95. super.onActivityResult(requestCode, resultCode, intent);
96. renderListView();
97. }
98. }
99. ————————————————————————————————————————————————————————————————————————
100. package com.eoeAndroid.SQLite;
101. 
102. import java.util.Calendar;
103. import java.util.Date;
104. 
105. import android.content.ContentValues;
106. import android.content.Context;
107. import android.database.Cursor;
108. import android.database.SQLException;
109. import android.database.sqlite.SQLiteDatabase;
110. import android.database.sqlite.SQLiteOpenHelper;
111. import android.util.Log;
112. 
113. public class DiaryDbAdapter {
114. 
115. public static final String KEY_TITLE = "title";
116. public static final String KEY_BODY = "body";
117. public static final String KEY_ROWID = "_id";
118. public static final String KEY_CREATED = "created";
119. 
120. private static final String TAG = "DiaryDbAdapter";
121. private DatabaseHelper mDbHelper;
122. private SQLiteDatabase mDb;
123. 
124. private static final String DATABASE_CREATE = "create table diary (_id integer primary key autoincrement, "
125. + "title text not null, body text not null, created text not null);";
126. 
127. private static final String DATABASE_NAME = "database";
128. private static final String DATABASE_TABLE = "diary";
129. private static final int DATABASE_VERSION = 1;
130. 
131. private final Context mCtx;
132. 
133. private static class DatabaseHelper extends SQLiteOpenHelper {
134. 
135. DatabaseHelper(Context context) {
136. super(context, DATABASE_NAME, null, DATABASE_VERSION);
137. }
138. 
139. @Override
140. public void onCreate(SQLiteDatabase db) {
141. db.execSQL(DATABASE_CREATE);
142. }
143. 
144. @Override
145. public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
146. db.execSQL("DROP TABLE IF EXISTS diary");
147. onCreate(db);
148. }
149. }
150. 
151. public DiaryDbAdapter(Context ctx) {
152. this.mCtx = ctx;
153. }
154. 
155. public DiaryDbAdapter open() throws SQLException {
156. mDbHelper = new DatabaseHelper(mCtx);
157. mDb = mDbHelper.getWritableDatabase();
158. return this;
159. }
160. 
161. public void closeclose() {
162. mDbHelper.close();
163. }
164. 
165. public long createDiary(String title, String body) {
166. ContentValues initialValues = new ContentValues();
167. initialValues.put(KEY_TITLE, title);
168. initialValues.put(KEY_BODY, body);
169. Calendar calendar = Calendar.getInstance();
170. String created = calendar.get(Calendar.YEAR) + "年"
171. + calendar.get(Calendar.MONTH) + "月"
172. + calendar.get(Calendar.DAY_OF_MONTH) + "日"
173. + calendar.get(Calendar.HOUR_OF_DAY) + "时"
174. + calendar.get(Calendar.MINUTE) + "分";
175. initialValues.put(KEY_CREATED, created);
176. return mDb.insert(DATABASE_TABLE, null, initialValues);
177. }
178. 
179. public boolean deleteDiary(long rowId) {
180. 
181. return mDb.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0;
182. }
183. 
184. public Cursor getAllNotes() {
185. 
186. return mDb.query(DATABASE_TABLE, new String[] { KEY_ROWID, KEY_TITLE,
187. KEY_BODY, KEY_CREATED }, null, null, null, null, null);
188. }
189. 
190. public Cursor getDiary(long rowId) throws SQLException {
191. 
192. Cursor mCursor =
193. 
194. mDb.query(true, DATABASE_TABLE, new String[] { KEY_ROWID, KEY_TITLE,
195. KEY_BODY, KEY_CREATED }, KEY_ROWID + "=" + rowId, null, null,
196. null, null, null);
197. if (mCursor != null) {
198. mCursor.moveToFirst();
199. }
200. return mCursor;
201. 
202. }
203. 
204. public boolean updateDiary(long rowId, String title, String body) {
205. ContentValues args = new ContentValues();
206. args.put(KEY_TITLE, title);
207. args.put(KEY_BODY, body);
208. Calendar calendar = Calendar.getInstance();
209. String created = calendar.get(Calendar.YEAR) + "年"
210. + calendar.get(Calendar.MONTH) + "月"
211. + calendar.get(Calendar.DAY_OF_MONTH) + "日"
212. + calendar.get(Calendar.HOUR_OF_DAY) + "时"
213. + calendar.get(Calendar.MINUTE) + "分";
214. args.put(KEY_CREATED, created);
215. 
216. return mDb.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null) > 0;
217. }
218. }
 
Activity中取的Drawable的方法
Resources resources = getBaseContext().getResources();
Drawable drawable = resources.getDrawable(R.drawable.white);
snippet for searching through Google
Intent intent = new Intent();
intent.setAction(Intent.ACTION_WEB_SEARCH);
intent.putExtra(SearchManager.QUERY,"searchString")
startActivity(intent);

AudioTrack   AudioRecord
http://www.eoeandroid.com/thread-1071-1-6.htmlhttp://blog.sina.com.cn/s/blog_6309e1ed0100j1rw.html 
http://dev.10086.cn/cmdn/bbs/thread-16500-1-1.html 
1. int y = 0;
2. public void onItemClick(AdapterView<?> arg0, View v, int position, long id) {
3.   LayoutInflater factory = LayoutInflater.from(myListView.this);
4.   final View textEntryView = factory.inflate(R.layout.paopao_alert_dialog, null);
5.   Object obj = getSystemService(Context.WINDOW_SERVICE);   
6.   WindowManager wm = (WindowManager) obj;   
7.   int envWidth = wm.getDefaultDisplay().getWidth();   
8.   int envHeight = wm.getDefaultDisplay().getHeight();  
9.   if(pw == null)
10.   {
11.    pw = new PopupWindow(textEntryView); 
12.    pw.showAtLocation(v, Gravity.LEFT,0,0); 
13.   }else if(!pw.isShowing()){
14.    pw = new PopupWindow(textEntryView); 
15.    pw.showAtLocation(v, Gravity.LEFT,0,0); 
16.   }
17.   int pwH = 70;
18.   int pwW = 166;
19.   y = -envHeight/2+v.getTop() + pwH;
20.   pw.update(0,y,pwW,pwH); 
21. 
22.   textEntryView.findViewById(R.id.phone).setOnClickListener(new View.OnClickListener() {
23.    public void onClick(View v) {
24.     // TODO Auto-generated method stub
25.     pw.dismiss();
26.    }
27.   });
•

  • //创建弹出窗口:指定View、大小、背景透明,及其它属性
  •     popupWindow = new PopupWindow(board, width, height);
  •     popupWindow.setBackgroundDrawable(null);
  •     popupWindow.setOutsideTouchable(false);
  •     popupWindow.setClippingEnabled(false);
  • http://news.wangmeng.cn/detailNews/2372
  • http://www.eoeandroid.com/thread-23314-1-1.html
  • http://www.eoeandroid.com/viewthread.php?tid=23314&highlight=popupwindow
  • http://www.eoeandroid.com/viewthread.php?tid=10850&highlight=popup%2Bwindow

http://www.eoeandroid.com/viewthread.php?tid=24780&page=1&extra=#pid193855


拨打电话:


Intent myIntentDial = new Intent("android.intent.action.CALL",Uri.parse("tel:"+strInput)) 
 
<uses-permission android:name="android.permission.CALL_PHONE"/> 
 

验证号码Android:phoneNumber=“true”



如果调用虚拟键盘拨打电话Intent myIntentDial = new Intent("android.intent.action. DIAL",Uri.parse("tel:"+strInput))

 

 

发送短信


PendingIntent mPI = PendingIntent.getBroadcast(Activity.this,0,new Intent(),0);
SmsManager smsManager = SmsManager.getDefault();
smsManager .sendTextMessage(收件人地址String,发送地址String,正文String,发送服务PendingIntent ,送到服务PendingIntent );


如果直接使用PendingIntent 是有目的的传送, 那广播可真算是漫无目的的传送信息了