用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>