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. RelativeLayout.LayoutParams relParam = new RelativeLayout.LayoutParams(
  12. RelativeLayout.LayoutParams.WRAP_CONTENT,
  13. RelativeLayout.LayoutParams.WRAP_CONTENT);
  14. layoutMain.addView(layoutLeft, 100, 100);//第一个参数是添加进去的view,第二个是view的高度,第三个参数是view的宽度
  15. layoutMain.addView(layoutRight, relParam);
  16. }

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. import android.app.Activity;
  3. import android.content.Context;
  4. import android.database.Cursor;
  5. import android.database.SQLException;
  6. import android.database.sqlite.SQLiteDatabase;
  7. import android.database.sqlite.SQLiteOpenHelper;
  8. import android.os.Bundle;
  9. import android.util.Log;
  10. import android.view.View;
  11. import android.view.View.OnClickListener;
  12. import android.widget.Button;

  13. public class ActivityMain extends Activity {
  14. OnClickListener listener1 = null;
  15. OnClickListener listener2 = null;
  16. OnClickListener listener3 = null;
  17. OnClickListener listener4 = null;
  18. OnClickListener listener5 = null;

  19. Button button1;
  20. Button button2;
  21. Button button3;
  22. Button button4;
  23. Button button5;

  24. DatabaseHelper mOpenHelper;

  25. private static final String DATABASE_NAME = "dbForTest.db";
  26. private static final int DATABASE_VERSION = 1;
  27. private static final String TABLE_NAME = "diary";
  28. private static final String TITLE = "title";
  29. private static final String BODY = "body";

  30. private static class DatabaseHelper extends SQLiteOpenHelper {
  31. DatabaseHelper(Context context) {
  32. super(context, DATABASE_NAME, null, DATABASE_VERSION);
  33. }

  34. @Override
  35. public void onCreate(SQLiteDatabase db) {

  36. String sql = "CREATE TABLE " + TABLE_NAME + " (" + TITLE
  37. + " text not null, " + BODY + " text not null " + ");";
  38. Log.i("haiyang:createDB=", sql);
  39. db.execSQL(sql);

  40. }

  41. @Override
  42. public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  43. }
  44. }

  45. @Override
  46. public void onCreate(Bundle savedInstanceState) {
  47. super.onCreate(savedInstanceState);
  48. setContentView(R.layout.main);
  49. prepareListener();
  50. initLayout();
  51. mOpenHelper = new DatabaseHelper(this);

  52. }

  53. private void initLayout() {
  54. button1 = (Button) findViewById(R.id.button1);
  55. button1.setOnClickListener(listener1);

  56. button2 = (Button) findViewById(R.id.button2);
  57. button2.setOnClickListener(listener2);

  58. button3 = (Button) findViewById(R.id.button3);
  59. button3.setOnClickListener(listener3);
  60. button4 = (Button) findViewById(R.id.button4);
  61. button4.setOnClickListener(listener4);

  62. button5 = (Button) findViewById(R.id.button5);
  63. button5.setOnClickListener(listener5);

  64. }

  65. private void prepareListener() {
  66. listener1 = new OnClickListener() {
  67. public void onClick(View v) {
  68. CreateTable();
  69. }
  70. };
  71. listener2 = new OnClickListener() {
  72. public void onClick(View v) {
  73. dropTable();
  74. }
  75. };
  76. listener3 = new OnClickListener() {
  77. public void onClick(View v) {
  78. insertItem();
  79. }
  80. };
  81. listener4 = new OnClickListener() {
  82. public void onClick(View v) {
  83. deleteItem();
  84. }
  85. };
  86. listener5 = new OnClickListener() {
  87. public void onClick(View v) {
  88. showItems();
  89. }
  90. };
  91. }

  92. /*
  93. * 重新建立数据表
  94. */
  95. private void CreateTable() {
  96. SQLiteDatabase db = mOpenHelper.getWritableDatabase();
  97. String sql = "CREATE TABLE " + TABLE_NAME + " (" + TITLE
  98. + " text not null, " + BODY + " text not null " + ");";
  99. Log.i("haiyang:createDB=", sql);

  100. try {
  101. db.execSQL("DROP TABLE IF EXISTS diary");
  102. db.execSQL(sql);
  103. setTitle("数据表成功重建");
  104. } catch (SQLException e) {
  105. setTitle("数据表重建错误");
  106. }
  107. }

  108. /*
  109. * 删除数据表
  110. */
  111. private void dropTable() {
  112. SQLiteDatabase db = mOpenHelper.getWritableDatabase();
  113. String sql = "drop table " + TABLE_NAME;
  114. try {
  115. db.execSQL(sql);
  116. setTitle("数据表成功删除:" + sql);
  117. } catch (SQLException e) {
  118. setTitle("数据表删除错误");
  119. }
  120. }

  121. /*
  122. * 插入两条数据
  123. */
  124. private void insertItem() {
  125. SQLiteDatabase db = mOpenHelper.getWritableDatabase();
  126. String sql1 = "insert into " + TABLE_NAME + " (" + TITLE + ", " + BODY
  127. + ") values('haiyang', 'android的发展真是迅速啊');";
  128. String sql2 = "insert into " + TABLE_NAME + " (" + TITLE + ", " + BODY
  129. + ") values('icesky', 'android的发展真是迅速啊');";
  130. try {
  131. Log.i("haiyang:sql1=", sql1);
  132. Log.i("haiyang:sql2=", sql2);
  133. db.execSQL(sql1);
  134. db.execSQL(sql2);
  135. setTitle("插入两条数据成功");
  136. } catch (SQLException e) {
  137. setTitle("插入两条数据失败");
  138. }
  139. }

  140. /*
  141. * 删除其中的一条数据
  142. */
  143. private void deleteItem() {
  144. try {
  145. SQLiteDatabase db = mOpenHelper.getWritableDatabase();
  146. db.delete(TABLE_NAME, " title = 'haiyang'", null);
  147. setTitle("删除title为haiyang的一条记录");
  148. } catch (SQLException e) {

  149. }

  150. }

  151. /*
  152. * 在屏幕的title区域显示当前数据表当中的数据的条数。
  153. */
  154. private void showItems() {

  155. SQLiteDatabase db = mOpenHelper.getReadableDatabase();
  156. String col[] = { TITLE, BODY };
  157. Cursor cur = db.query(TABLE_NAME, col, null, null, null, null, null);
  158. Integer num = cur.getCount();
  159. setTitle(Integer.toString(num) + " 条记录");
  160. }
  161. }

ContentValues
利用ContentValues来代替原来SQL语句进行数据库的操作。ContentValues存储值都只能是基本类型。

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

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

重点方法介绍:renderListView()

  1. package com.eoeAndroid.SQLite;

  2. import android.app.ListActivity;
  3. import android.content.Intent;
  4. import android.database.Cursor;
  5. import android.os.Bundle;
  6. import android.view.Menu;
  7. import android.view.MenuItem;
  8. import android.view.View;
  9. import android.widget.ListView;
  10. import android.widget.SimpleCursorAdapter;

  11. /**
  12. * @author jinyan
  13. *
  14. */
  15. public class ActivityMain extends ListActivity {
  16. private static final int ACTIVITY_CREATE = 0;
  17. private static final int ACTIVITY_EDIT = 1;

  18. private static final int INSERT_ID = Menu.FIRST;
  19. private static final int DELETE_ID = Menu.FIRST + 1;

  20. private DiaryDbAdapter mDbHelper;
  21. private Cursor mDiaryCursor;

  22. @Override
  23. public void onCreate(Bundle savedInstanceState) {
  24. super.onCreate(savedInstanceState);
  25. setContentView(R.layout.diary_list);
  26. mDbHelper = new DiaryDbAdapter(this);
  27. mDbHelper.open();
  28. renderListView();

  29. }

  30. private void renderListView() {
  31. mDiaryCursor = mDbHelper.getAllNotes();
  32. startManagingCursor(mDiaryCursor);
  33. String[] from = new String[] { DiaryDbAdapter.KEY_TITLE,
  34. DiaryDbAdapter.KEY_CREATED };
  35. int[] to = new int[] { R.id.text1, R.id.created };
  36. SimpleCursorAdapter notes = new SimpleCursorAdapter(this,
  37. R.layout.diary_row, mDiaryCursor, from, to);
  38. setListAdapter(notes);
  39. }

  40. @Override
  41. public boolean onCreateOptionsMenu(Menu menu) {
  42. super.onCreateOptionsMenu(menu);
  43. menu.add(0, INSERT_ID, 0, R.string.menu_insert);
  44. menu.add(0, DELETE_ID, 0, R.string.menu_delete);
  45. return true;
  46. }

  47. @Override
  48. public boolean onMenuItemSelected(int featureId, MenuItem item) {
  49. switch (item.getItemId()) {
  50. case INSERT_ID:
  51. createDiary();
  52. return true;
  53. case DELETE_ID:
  54. mDbHelper.deleteDiary(getListView().getSelectedItemId());
  55. renderListView();
  56. return true;
  57. }
  58. return super.onMenuItemSelected(featureId, item);
  59. }

  60. private void createDiary() {
  61. Intent i = new Intent(this, ActivityDiaryEdit.class);
  62. startActivityForResult(i, ACTIVITY_CREATE);
  63. }

  64. @Override
  65. // 需要对position和id进行一个很好的区分
  66. // position指的是点击的这个ViewItem在当前ListView中的位置
  67. // 每一个和ViewItem绑定的数据,肯定都有一个id,通过这个id可以找到那条数据。
  68. protected void onListItemClick(ListView l, View v, int position, long id) {
  69. super.onListItemClick(l, v, position, id);
  70. Cursor c = mDiaryCursor;
  71. c.moveToPosition(position);
  72. Intent i = new Intent(this, ActivityDiaryEdit.class);
  73. i.putExtra(DiaryDbAdapter.KEY_ROWID, id);
  74. i.putExtra(DiaryDbAdapter.KEY_TITLE, c.getString(c
  75. .getColumnIndexOrThrow(DiaryDbAdapter.KEY_TITLE)));
  76. i.putExtra(DiaryDbAdapter.KEY_BODY, c.getString(c
  77. .getColumnIndexOrThrow(DiaryDbAdapter.KEY_BODY)));
  78. startActivityForResult(i, ACTIVITY_EDIT);
  79. }

  80. @Override
  81. protected void onActivityResult(int requestCode, int resultCode,
  82. Intent intent) {
  83. super.onActivityResult(requestCode, resultCode, intent);
  84. renderListView();
  85. }
  86. }
  87. ————————————————————————————————————————————————————————————————————————
  88. package com.eoeAndroid.SQLite;

  89. import java.util.Calendar;
  90. import java.util.Date;

  91. import android.content.ContentValues;
  92. import android.content.Context;
  93. import android.database.Cursor;
  94. import android.database.SQLException;
  95. import android.database.sqlite.SQLiteDatabase;
  96. import android.database.sqlite.SQLiteOpenHelper;
  97. import android.util.Log;

  98. public class DiaryDbAdapter {

  99. public static final String KEY_TITLE = "title";
  100. public static final String KEY_BODY = "body";
  101. public static final String KEY_ROWID = "_id";
  102. public static final String KEY_CREATED = "created";

  103. private static final String TAG = "DiaryDbAdapter";
  104. private DatabaseHelper mDbHelper;
  105. private SQLiteDatabase mDb;

  106. private static final String DATABASE_CREATE = "create table diary (_id integer primary key autoincrement, "
  107. + "title text not null, body text not null, created text not null);";

  108. private static final String DATABASE_NAME = "database";
  109. private static final String DATABASE_TABLE = "diary";
  110. private static final int DATABASE_VERSION = 1;

  111. private final Context mCtx;

  112. private static class DatabaseHelper extends SQLiteOpenHelper {

  113. DatabaseHelper(Context context) {
  114. super(context, DATABASE_NAME, null, DATABASE_VERSION);
  115. }

  116. @Override
  117. public void onCreate(SQLiteDatabase db) {
  118. db.execSQL(DATABASE_CREATE);
  119. }

  120. @Override
  121. public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  122. db.execSQL("DROP TABLE IF EXISTS diary");
  123. onCreate(db);
  124. }
  125. }

  126. public DiaryDbAdapter(Context ctx) {
  127. this.mCtx = ctx;
  128. }

  129. public DiaryDbAdapter open() throws SQLException {
  130. mDbHelper = new DatabaseHelper(mCtx);
  131. mDb = mDbHelper.getWritableDatabase();
  132. return this;
  133. }

  134. public void closeclose() {
  135. mDbHelper.close();
  136. }

  137. public long createDiary(String title, String body) {
  138. ContentValues initialValues = new ContentValues();
  139. initialValues.put(KEY_TITLE, title);
  140. initialValues.put(KEY_BODY, body);
  141. Calendar calendar = Calendar.getInstance();
  142. String created = calendar.get(Calendar.YEAR) + "年"
  143. + calendar.get(Calendar.MONTH) + "月"
  144. + calendar.get(Calendar.DAY_OF_MONTH) + "日"
  145. + calendar.get(Calendar.HOUR_OF_DAY) + "时"
  146. + calendar.get(Calendar.MINUTE) + "分";
  147. initialValues.put(KEY_CREATED, created);
  148. return mDb.insert(DATABASE_TABLE, null, initialValues);
  149. }

  150. public boolean deleteDiary(long rowId) {

  151. return mDb.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0;
  152. }

  153. public Cursor getAllNotes() {

  154. return mDb.query(DATABASE_TABLE, new String[] { KEY_ROWID, KEY_TITLE,
  155. KEY_BODY, KEY_CREATED }, null, null, null, null, null);
  156. }

  157. public Cursor getDiary(long rowId) throws SQLException {

  158. Cursor mCursor =

  159. mDb.query(true, DATABASE_TABLE, new String[] { KEY_ROWID, KEY_TITLE,
  160. KEY_BODY, KEY_CREATED }, KEY_ROWID + "=" + rowId, null, null,
  161. null, null, null);
  162. if (mCursor != null) {
  163. mCursor.moveToFirst();
  164. }
  165. return mCursor;

  166. }

  167. public boolean updateDiary(long rowId, String title, String body) {
  168. ContentValues args = new ContentValues();
  169. args.put(KEY_TITLE, title);
  170. args.put(KEY_BODY, body);
  171. Calendar calendar = Calendar.getInstance();
  172. String created = calendar.get(Calendar.YEAR) + "年"
  173. + calendar.get(Calendar.MONTH) + "月"
  174. + calendar.get(Calendar.DAY_OF_MONTH) + "日"
  175. + calendar.get(Calendar.HOUR_OF_DAY) + "时"
  176. + calendar.get(Calendar.MINUTE) + "分";
  177. args.put(KEY_CREATED, created);

  178. return mDb.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null) > 0;
  179. }
  180. }

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.html
http://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. textEntryView.findViewById(R.id.phone).setOnClickListener(new View.OnClickListener() {
  22. public void onClick(View v) {
  23. // TODO Auto-generated method stub
  24. pw.dismiss();
  25. }
  26. });

  • //创建弹出窗口:指定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 是有目的的传送, 那广播可真算是漫无目的的传送信息了

更多相关文章

  1. SpringBoot 2.0 中 HikariCP 数据库连接池原理解析
  2. 解决Android数据库锁的问题
  3. Android(安卓)ExpandableListView折叠
  4. React Native开发指南
  5. Android(安卓)开源组件PagerBottomTabStrip 快速构建底部导航栏
  6. 【 Android(安卓)10 系统启动 】系列 -- Launcher(应用门户)
  7. Android(安卓)ListView中onItemClickListener事件失效的解决方法
  8. android MediaCodec ACodec OMX tips
  9. Android判断现在所处界面是否为home主桌面的方法

随机推荐

  1. Android OpenGL 显示基本图形及相关概念
  2. Android 5.x--使用Material Theme加Palet
  3. 关于Edittext点击弹出软键盘,布局上移标题
  4. Android(安卓)程序员学习 iOS ——UIView
  5. android 实例覆盖各个方面
  6. 瘸腿蛤蟆笔记cocos2d-x-3.2移植到到andro
  7. Android 快速开发框架,thinkandroid改变和
  8. 还在用枚举?我早就抛弃了!(Android(安卓)注
  9. Android之常见安全问题
  10. 初涉Android蓝牙开发(转) 收藏以备后用