贴代码,顺便解释一下:
public class ContentPickerTester extends Activity { public static final int PICK_CONTACT = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.contentpickertester);
Button button = (Button) findViewById(R.id.pick_contact_button);
button.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
//Intent intent = new Intent(Intent.ACTION_PICK,ContactsContract.Contacts.CONTENT_URI);
Intent intent = new Intent(Intent.ACTION_PICK,Uri.parse("content://com.android.contacts/contacts"));
startActivityForResult(intent, PICK_CONTACT);
Log.v("---Debug---","After startActivityForResult");
}
});
}
/*
* 此类为主类,在程序运行的时候加载一个Button,添加相应onClick事件
* onClick事件中,new一个Intent,并且提供相应的URI参数
* 然后startActivityForResult
* 此时应用程序将启动一个子Activity,通过manifest的intentfilter指定为.ContactPicker
* */
ContactPicker这个activity代码如下:
public class ContactPicker extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Intent intent = getIntent();
String dataPath = intent.getData().toString();
Log.e("^^^^^DEBUG^^^^^",dataPath);
System.out.println(dataPath);
final Uri data = Uri.parse(dataPath+"people/");
final Cursor c = managedQuery(data, null, null, null, null);
String[] from = new String[]{People.DISPLAY_NAME};
int[] to = new int[]{R.id.itemTextView};
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,R.layout.listitemlayout,c,from,to);
ListView lv = (ListView) findViewById(R.id.contactListView);
lv.setAdapter(adapter);
问题就出在这里,子activity中的Log.e()方法并没有输出。
按照逻辑应该要执行到在里面,麻烦大家看看问题出在哪里?
public class ContentPickerTester extends Activity { public static final int PICK_CONTACT = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.contentpickertester);
Button button = (Button) findViewById(R.id.pick_contact_button);
button.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
//Intent intent = new Intent(Intent.ACTION_PICK,ContactsContract.Contacts.CONTENT_URI);
Intent intent = new Intent(Intent.ACTION_PICK,Uri.parse("content://com.android.contacts/contacts"));
startActivityForResult(intent, PICK_CONTACT);
Log.v("---Debug---","After startActivityForResult");
}
});
}
/*
* 此类为主类,在程序运行的时候加载一个Button,添加相应onClick事件
* onClick事件中,new一个Intent,并且提供相应的URI参数
* 然后startActivityForResult
* 此时应用程序将启动一个子Activity,通过manifest的intentfilter指定为.ContactPicker
* */
ContactPicker这个activity代码如下:
public class ContactPicker extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Intent intent = getIntent();
String dataPath = intent.getData().toString();
Log.e("^^^^^DEBUG^^^^^",dataPath);
System.out.println(dataPath);
final Uri data = Uri.parse(dataPath+"people/");
final Cursor c = managedQuery(data, null, null, null, null);
String[] from = new String[]{People.DISPLAY_NAME};
int[] to = new int[]{R.id.itemTextView};
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,R.layout.listitemlayout,c,from,to);
ListView lv = (ListView) findViewById(R.id.contactListView);
lv.setAdapter(adapter);
问题就出在这里,子activity中的Log.e()方法并没有输出。
按照逻辑应该要执行到在里面,麻烦大家看看问题出在哪里?
startActivityForResult(intent, PICK_CONTACT);
这样进不到你的ContactPicker啊,Uri是系统的联系人,怎么可能进入到你的ContactPicker呢,
你要这样才行:
Intent in = new Intent(ACTION_VIEW);
in.setClass("yourpackagename","classname");
startActivityForResult(in, 0);然后ContentPickerTester里实现
onActivityResult()函数,可以看到startActivityForResult的结果
我的ContactPicker用filter拦截了这个ACTION,应该就可以到他里面去的啊。