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 表格布局,把包含的元素以行和列进行排列。表格的列数为每一行的最大列数。
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- LinearLayout layoutMain = new LinearLayout(this);
- layoutMain.setOrientation(LinearLayout.HORIZONTAL);
- setContentView(layoutMain);
- LayoutInflater inflate = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- RelativeLayout layoutLeft = (RelativeLayout) inflate.inflate(
- R.layout.left, null);
- RelativeLayout layoutRight = (RelativeLayout) inflate.inflate(
- R.layout.right, null);
- RelativeLayout.LayoutParams relParam = new RelativeLayout.LayoutParams(
- RelativeLayout.LayoutParams.WRAP_CONTENT,
- RelativeLayout.LayoutParams.WRAP_CONTENT);
- layoutMain.addView(layoutLeft, 100, 100);//第一个参数是添加进去的view,第二个是view的高度,第三个参数是view的宽度
- layoutMain.addView(layoutRight, relParam);
- }
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我们可以对从数据库查询出来的结果集进行随机的读写访问。
- package com.ex08_1.SQLite;
- import android.app.Activity;
- import android.content.Context;
- import android.database.Cursor;
- import android.database.SQLException;
- import android.database.sqlite.SQLiteDatabase;
- import android.database.sqlite.SQLiteOpenHelper;
- import android.os.Bundle;
- import android.util.Log;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- public class ActivityMain extends Activity {
- OnClickListener listener1 = null;
- OnClickListener listener2 = null;
- OnClickListener listener3 = null;
- OnClickListener listener4 = null;
- OnClickListener listener5 = null;
- Button button1;
- Button button2;
- Button button3;
- Button button4;
- Button button5;
- DatabaseHelper mOpenHelper;
- private static final String DATABASE_NAME = "dbForTest.db";
- private static final int DATABASE_VERSION = 1;
- private static final String TABLE_NAME = "diary";
- private static final String TITLE = "title";
- private static final String BODY = "body";
- private static class DatabaseHelper extends SQLiteOpenHelper {
- DatabaseHelper(Context context) {
- super(context, DATABASE_NAME, null, DATABASE_VERSION);
- }
- @Override
- public void onCreate(SQLiteDatabase db) {
- String sql = "CREATE TABLE " + TABLE_NAME + " (" + TITLE
- + " text not null, " + BODY + " text not null " + ");";
- Log.i("haiyang:createDB=", sql);
- db.execSQL(sql);
- }
- @Override
- public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
- }
- }
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- prepareListener();
- initLayout();
- mOpenHelper = new DatabaseHelper(this);
- }
- private void initLayout() {
- button1 = (Button) findViewById(R.id.button1);
- button1.setOnClickListener(listener1);
- button2 = (Button) findViewById(R.id.button2);
- button2.setOnClickListener(listener2);
- button3 = (Button) findViewById(R.id.button3);
- button3.setOnClickListener(listener3);
- button4 = (Button) findViewById(R.id.button4);
- button4.setOnClickListener(listener4);
- button5 = (Button) findViewById(R.id.button5);
- button5.setOnClickListener(listener5);
- }
- private void prepareListener() {
- listener1 = new OnClickListener() {
- public void onClick(View v) {
- CreateTable();
- }
- };
- listener2 = new OnClickListener() {
- public void onClick(View v) {
- dropTable();
- }
- };
- listener3 = new OnClickListener() {
- public void onClick(View v) {
- insertItem();
- }
- };
- listener4 = new OnClickListener() {
- public void onClick(View v) {
- deleteItem();
- }
- };
- listener5 = new OnClickListener() {
- public void onClick(View v) {
- showItems();
- }
- };
- }
- /*
- * 重新建立数据表
- */
- private void CreateTable() {
- SQLiteDatabase db = mOpenHelper.getWritableDatabase();
- String sql = "CREATE TABLE " + TABLE_NAME + " (" + TITLE
- + " text not null, " + BODY + " text not null " + ");";
- Log.i("haiyang:createDB=", sql);
- try {
- db.execSQL("DROP TABLE IF EXISTS diary");
- db.execSQL(sql);
- setTitle("数据表成功重建");
- } catch (SQLException e) {
- setTitle("数据表重建错误");
- }
- }
- /*
- * 删除数据表
- */
- private void dropTable() {
- SQLiteDatabase db = mOpenHelper.getWritableDatabase();
- String sql = "drop table " + TABLE_NAME;
- try {
- db.execSQL(sql);
- setTitle("数据表成功删除:" + sql);
- } catch (SQLException e) {
- setTitle("数据表删除错误");
- }
- }
- /*
- * 插入两条数据
- */
- private void insertItem() {
- SQLiteDatabase db = mOpenHelper.getWritableDatabase();
- String sql1 = "insert into " + TABLE_NAME + " (" + TITLE + ", " + BODY
- + ") values('haiyang', 'android的发展真是迅速啊');";
- String sql2 = "insert into " + TABLE_NAME + " (" + TITLE + ", " + BODY
- + ") values('icesky', 'android的发展真是迅速啊');";
- try {
- Log.i("haiyang:sql1=", sql1);
- Log.i("haiyang:sql2=", sql2);
- db.execSQL(sql1);
- db.execSQL(sql2);
- setTitle("插入两条数据成功");
- } catch (SQLException e) {
- setTitle("插入两条数据失败");
- }
- }
- /*
- * 删除其中的一条数据
- */
- private void deleteItem() {
- try {
- SQLiteDatabase db = mOpenHelper.getWritableDatabase();
- db.delete(TABLE_NAME, " title = 'haiyang'", null);
- setTitle("删除title为haiyang的一条记录");
- } catch (SQLException e) {
- }
- }
- /*
- * 在屏幕的title区域显示当前数据表当中的数据的条数。
- */
- private void showItems() {
- SQLiteDatabase db = mOpenHelper.getReadableDatabase();
- String col[] = { TITLE, BODY };
- Cursor cur = db.query(TABLE_NAME, col, null, null, null, null, null);
- Integer num = cur.getCount();
- setTitle(Integer.toString(num) + " 条记录");
- }
- }
ContentValues
利用ContentValues来代替原来SQL语句进行数据库的操作。ContentValues存储值都只能是基本类型。
SimpleCursorAdapter
SimpleCursorAdapter类和ListView配合进行ListView的显示。
封装SQLiteDatabase,让访问数据更加方便和安全。
重点方法介绍:renderListView()
- package com.eoeAndroid.SQLite;
- import android.app.ListActivity;
- import android.content.Intent;
- import android.database.Cursor;
- import android.os.Bundle;
- import android.view.Menu;
- import android.view.MenuItem;
- import android.view.View;
- import android.widget.ListView;
- import android.widget.SimpleCursorAdapter;
- /**
- * @author jinyan
- *
- */
- public class ActivityMain extends ListActivity {
- private static final int ACTIVITY_CREATE = 0;
- private static final int ACTIVITY_EDIT = 1;
- private static final int INSERT_ID = Menu.FIRST;
- private static final int DELETE_ID = Menu.FIRST + 1;
- private DiaryDbAdapter mDbHelper;
- private Cursor mDiaryCursor;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.diary_list);
- mDbHelper = new DiaryDbAdapter(this);
- mDbHelper.open();
- renderListView();
- }
- private void renderListView() {
- mDiaryCursor = mDbHelper.getAllNotes();
- startManagingCursor(mDiaryCursor);
- String[] from = new String[] { DiaryDbAdapter.KEY_TITLE,
- DiaryDbAdapter.KEY_CREATED };
- int[] to = new int[] { R.id.text1, R.id.created };
- SimpleCursorAdapter notes = new SimpleCursorAdapter(this,
- R.layout.diary_row, mDiaryCursor, from, to);
- setListAdapter(notes);
- }
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- super.onCreateOptionsMenu(menu);
- menu.add(0, INSERT_ID, 0, R.string.menu_insert);
- menu.add(0, DELETE_ID, 0, R.string.menu_delete);
- return true;
- }
- @Override
- public boolean onMenuItemSelected(int featureId, MenuItem item) {
- switch (item.getItemId()) {
- case INSERT_ID:
- createDiary();
- return true;
- case DELETE_ID:
- mDbHelper.deleteDiary(getListView().getSelectedItemId());
- renderListView();
- return true;
- }
- return super.onMenuItemSelected(featureId, item);
- }
- private void createDiary() {
- Intent i = new Intent(this, ActivityDiaryEdit.class);
- startActivityForResult(i, ACTIVITY_CREATE);
- }
- @Override
- // 需要对position和id进行一个很好的区分
- // position指的是点击的这个ViewItem在当前ListView中的位置
- // 每一个和ViewItem绑定的数据,肯定都有一个id,通过这个id可以找到那条数据。
- protected void onListItemClick(ListView l, View v, int position, long id) {
- super.onListItemClick(l, v, position, id);
- Cursor c = mDiaryCursor;
- c.moveToPosition(position);
- Intent i = new Intent(this, ActivityDiaryEdit.class);
- i.putExtra(DiaryDbAdapter.KEY_ROWID, id);
- i.putExtra(DiaryDbAdapter.KEY_TITLE, c.getString(c
- .getColumnIndexOrThrow(DiaryDbAdapter.KEY_TITLE)));
- i.putExtra(DiaryDbAdapter.KEY_BODY, c.getString(c
- .getColumnIndexOrThrow(DiaryDbAdapter.KEY_BODY)));
- startActivityForResult(i, ACTIVITY_EDIT);
- }
- @Override
- protected void onActivityResult(int requestCode, int resultCode,
- Intent intent) {
- super.onActivityResult(requestCode, resultCode, intent);
- renderListView();
- }
- }
- ————————————————————————————————————————————————————————————————————————
- package com.eoeAndroid.SQLite;
- import java.util.Calendar;
- import java.util.Date;
- import android.content.ContentValues;
- import android.content.Context;
- import android.database.Cursor;
- import android.database.SQLException;
- import android.database.sqlite.SQLiteDatabase;
- import android.database.sqlite.SQLiteOpenHelper;
- import android.util.Log;
- public class DiaryDbAdapter {
- public static final String KEY_TITLE = "title";
- public static final String KEY_BODY = "body";
- public static final String KEY_ROWID = "_id";
- public static final String KEY_CREATED = "created";
- private static final String TAG = "DiaryDbAdapter";
- private DatabaseHelper mDbHelper;
- private SQLiteDatabase mDb;
- private static final String DATABASE_CREATE = "create table diary (_id integer primary key autoincrement, "
- + "title text not null, body text not null, created text not null);";
- private static final String DATABASE_NAME = "database";
- private static final String DATABASE_TABLE = "diary";
- private static final int DATABASE_VERSION = 1;
- private final Context mCtx;
- private static class DatabaseHelper extends SQLiteOpenHelper {
- DatabaseHelper(Context context) {
- super(context, DATABASE_NAME, null, DATABASE_VERSION);
- }
- @Override
- public void onCreate(SQLiteDatabase db) {
- db.execSQL(DATABASE_CREATE);
- }
- @Override
- public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
- db.execSQL("DROP TABLE IF EXISTS diary");
- onCreate(db);
- }
- }
- public DiaryDbAdapter(Context ctx) {
- this.mCtx = ctx;
- }
- public DiaryDbAdapter open() throws SQLException {
- mDbHelper = new DatabaseHelper(mCtx);
- mDb = mDbHelper.getWritableDatabase();
- return this;
- }
- public void closeclose() {
- mDbHelper.close();
- }
- public long createDiary(String title, String body) {
- ContentValues initialValues = new ContentValues();
- initialValues.put(KEY_TITLE, title);
- initialValues.put(KEY_BODY, body);
- Calendar calendar = Calendar.getInstance();
- String created = calendar.get(Calendar.YEAR) + "年"
- + calendar.get(Calendar.MONTH) + "月"
- + calendar.get(Calendar.DAY_OF_MONTH) + "日"
- + calendar.get(Calendar.HOUR_OF_DAY) + "时"
- + calendar.get(Calendar.MINUTE) + "分";
- initialValues.put(KEY_CREATED, created);
- return mDb.insert(DATABASE_TABLE, null, initialValues);
- }
- public boolean deleteDiary(long rowId) {
- return mDb.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0;
- }
- public Cursor getAllNotes() {
- return mDb.query(DATABASE_TABLE, new String[] { KEY_ROWID, KEY_TITLE,
- KEY_BODY, KEY_CREATED }, null, null, null, null, null);
- }
- public Cursor getDiary(long rowId) throws SQLException {
- Cursor mCursor =
- mDb.query(true, DATABASE_TABLE, new String[] { KEY_ROWID, KEY_TITLE,
- KEY_BODY, KEY_CREATED }, KEY_ROWID + "=" + rowId, null, null,
- null, null, null);
- if (mCursor != null) {
- mCursor.moveToFirst();
- }
- return mCursor;
- }
- public boolean updateDiary(long rowId, String title, String body) {
- ContentValues args = new ContentValues();
- args.put(KEY_TITLE, title);
- args.put(KEY_BODY, body);
- Calendar calendar = Calendar.getInstance();
- String created = calendar.get(Calendar.YEAR) + "年"
- + calendar.get(Calendar.MONTH) + "月"
- + calendar.get(Calendar.DAY_OF_MONTH) + "日"
- + calendar.get(Calendar.HOUR_OF_DAY) + "时"
- + calendar.get(Calendar.MINUTE) + "分";
- args.put(KEY_CREATED, created);
- return mDb.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null) > 0;
- }
- }
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
- int y = 0;
- public void onItemClick(AdapterView<?> arg0, View v, int position, long id) {
- LayoutInflater factory = LayoutInflater.from(myListView.this);
- final View textEntryView = factory.inflate(R.layout.paopao_alert_dialog, null);
- Object obj = getSystemService(Context.WINDOW_SERVICE);
- WindowManager wm = (WindowManager) obj;
- int envWidth = wm.getDefaultDisplay().getWidth();
- int envHeight = wm.getDefaultDisplay().getHeight();
- if(pw == null)
- {
- pw = new PopupWindow(textEntryView);
- pw.showAtLocation(v, Gravity.LEFT,0,0);
- }else if(!pw.isShowing()){
- pw = new PopupWindow(textEntryView);
- pw.showAtLocation(v, Gravity.LEFT,0,0);
- }
- int pwH = 70;
- int pwW = 166;
- y = -envHeight/2+v.getTop() + pwH;
- pw.update(0,y,pwW,pwH);
- textEntryView.findViewById(R.id.phone).setOnClickListener(new View.OnClickListener() {
- public void onClick(View v) {
- // TODO Auto-generated method stub
- pw.dismiss();
- }
- });
-
//创建弹出窗口:指定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
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 是有目的的传送, 那广播可真算是漫无目的的传送信息了 |