用Android SDK and AVD Manager创建AVD已经在第一篇中介绍过。这里专门对使用命令行创建AVD作个介绍:
使用android create avd 命令来创建AVD
行为:"create avd":
创建一个新的Android 虚拟设备。
选项:
-t --target 新的AVD 的Target ID(必须)
-c --sdcard 指向一个共享的SD 存储卡的路径或是为新的AVD 定制的新SD 存储卡的容量大小
-p --path 新AVD 将被创建的位置路径
-n --name 新AVD 的名称(必须)
-f --force 强制创建(覆盖已存在的AVD)
-s --skin 新AVD 的皮肤
举例如下:
例子:将建一个名叫GPhone 的AVD,Target ID=2、SD 存储卡容量52M、路径C:\AVD\、皮肤QVGA
开启命令行(开始->运行,键入cmd),进入Android SDK tools 目录
列出Target ID:andriod list target
查看已有的或新创建的AVD:android list avd
创建一个新的AVD:android create avd -n GPhone -t 2 -c 52M -p C:\AVD\ -s QVGA
运行指定的AVD:emulator -avd GPhone
日志原文:http://charm2004.blog.sohu.com/145743787.html
当两个应用程序A,B同时放问ContentProvider时,当A应用更新了数据库中的数据时,如何让B应用也能自动的监听到ContentProvider的变化,并且获得更新的数据呢?
下面是B的应用的activity
public class MainActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Uri uri = Uri.parse("content://cn.itcast.providers.personprovider/person"); getContentResolver().registerContentObserver(uri, true, new PersonProviderObServer(new Handler())); } private final class PersonProviderObServer extends ContentObserver{ public PersonProviderObServer(Handler handler) { super(handler); } @Override public void onChange(boolean selfChange) { Uri uri = Uri.parse("content://cn.itcast.providers.personprovider/person"); ContentResolver contentResolver = getContentResolver(); // select * from person order by personid desc limit 1 Cursor cursor = contentResolver.query(uri, null, null, null, "personid desc limit 1"); if(cursor.moveToFirst()){ int personid = cursor.getInt(cursor.getColumnIndex("personid")); String name = cursor.getString(cursor.getColumnIndex("name")); String phone = cursor.getString(cursor.getColumnIndex("phone")); int amount = cursor.getInt(cursor.getColumnIndex("amount")); Log.i("MainActivity", "id="+ personid+ ",name="+ name+ ",phone="+ phone+ ",amount="+ amount); } } } }
注:在A应用更新完数据之后,应该主动通知B应用,使用如下代码:
getContext().getContentResolver().notifyChange(uri, null);
本范例以EditView与TextView示范如何在捕捉User键盘输入文字的时实时取得文字,同步显示于Textview,实时输入输出。
package com.chaowen; import android.app.Activity; import android.os.Bundle; import android.view.KeyEvent; import android.view.View; import android.widget.EditText; import android.widget.TextView; public class Ex04_01 extends Activity { /** Called when the activity is first created. */ private TextView mTextView; private EditText mEditText; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mTextView=(TextView)findViewById(R.id.myTextView); mEditText=(EditText)findViewById(R.id.myEditText); //设置EditText用onkeyListener来启动 mEditText.setOnKeyListener(new EditText.OnKeyListener(){ @Override public boolean onKey(View v, int keyCode, KeyEvent event) { mTextView.setText(mEditText.getText().toString()); return false; } }); } }
//main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> <EditText android:id="@+id/myEditText" android:layout_width="149px" android:layout_height="wrap_content" android:textSize="18sp" android:layout_x="29px" android:layout_y="33px" /> <TextView android:id="@+id/myTextView" android:layout_width="135px" android:layout_height="41px" android:layout_x="33px" android:layout_y="106px" /> </LinearLayout>