Intent隐式启动自定义意图

这是Android高级编程上面的一个例子,先看一下程序的效果:


public class ContackPickerTest extends Activity{ private static final int REQUEST_CONTACT_PICKER=1; private Button mContactPickerBtn; private TextView mTextView; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.contact_picker_test); mContactPickerBtn = (Button) findViewById(R.id.contact_picker_button); mTextView=(TextView)findViewById(R.id.textView); mContactPickerBtn.setOnClickListener(listener); }; View.OnClickListener listener=new View.OnClickListener() { @Override public void onClick(View v) { Intent intent=new Intent(Intent.ACTION_PICK, Uri.parse("content://contactsr")); startActivityForResult(intent, REQUEST_CONTACT_PICKER); } }; protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case REQUEST_CONTACT_PICKER:{ if (resultCode==Activity.RESULT_OK) { showContactName(data); } } break; default: break; } } private void showContactName(Intent data) { Uri contactData=data.getData(); Cursor cursor=managedQuery(contactData, null, null, null, null); cursor.moveToFirst(); String name=cursor.getString(cursor.getColumnIndexOrThrow(People.NAME)); mTextView.setText(name); }; }public class ContactPicker extends Activity{ private ListView mListView; private SimpleCursorAdapter mCursorAdapter; private Cursor mCursor; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.contact_picker); mCursor=getContactCursor(getIntent()); mListView=(ListView)findViewById(R.id.listView); String[] from=new String[]{People.NAME}; int[] to=new int[]{R.id.textView}; mCursorAdapter=new SimpleCursorAdapter(this, R.layout.contact_picker_item, mCursor, from, to); mListView.setAdapter(mCursorAdapter); mListView.setOnItemClickListener(listener); } OnItemClickListener listener=new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { mCursor.moveToPosition(position); int rowID=mCursor.getInt(mCursor.getColumnIndexOrThrow("_id")); Uri uri=Uri.parse(getContactData(getIntent()).toString()+rowID); Intent intent=new Intent(); intent.setData(uri); setResult(Activity.RESULT_OK, intent); finish(); } }; private Cursor getContactCursor(Intent intent) { Cursor cursor; Uri uri = getContactData(intent); cursor=managedQuery(uri, null, null, null, null); return cursor; } private Uri getContactData(Intent intent) { Cursor cursor=null; String dataPath=intent.getData().toString(); dataPath=dataPath.substring(0, dataPath.length()-1); Uri uri=Uri.parse(dataPath+"/people/"); return uri; } } <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.gao.apidemo" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".contactpicker.ContackPickerTest" android:theme="@style/ToDoTheme"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".contactpicker.ContactPicker"> <intent-filter> <action android:name="android.intent.action.PICK"/> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="content" android:path="contactsr"/> </intent-filter> </activity> </application> <uses-permission android:name="android.permission.READ_CONTACTS"/> </manifest> 在这个从程序中如果写成Intent intent=new Intent(Intent.ACTION_PICK, Uri.parse("content://contacts"));程序会出现错误,而如果写成Uri.parse("content://contacts/people")则会匹配系统自己的联系人列表,所以没有办法在Uri.parse("content://contactsr")上填了个r在manifest里面也相应的添了个r,然后再将这个r去掉。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值