《Android编程权威指南(第三版)》第十五章挑战练习Demo
第一题,使用IntentBuilder创建Intent,关键代码:
mReportButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { /** Intent i = new Intent(Intent.ACTION_SEND); i.setType("text/plan"); i.putExtra(Intent.EXTRA_TEXT, getCrimeReport()); i.putExtra(Intent.EXTRA_SUBJECT, getString(R.string.crime_report_subject)); i = Intent.createChooser(i, getString(R.string.send_report)); */ ShareCompat.IntentBuilder i = ShareCompat.IntentBuilder.from(getActivity()) .setType("text/plan") .setText(getCrimeReport()) .setSubject(getString(R.string.crime_report_subject)) .setSubject(getString(R.string.send_report)); i.createChooserIntent(); i.startChooser(); } });
第二题,添加联系电话:
先在Crime类中加一个电话号码变量:
public class Crime { private UUID mId; private String mTitle; private Date mDate; private boolean mSolved; private String mSuspect; private String mPhone; public Crime() { this(UUID.randomUUID()); } public Crime(UUID id) { mId = id; mDate = new Date(); } public UUID getId() { return mId; } public String getTitle() { return mTitle; } public Date getDate() { return mDate; } public boolean isSolved() { return mSolved; } public void setTitle(String title) { mTitle = title; } public void setDate(Date date) { mDate = date; } public void setSolved(boolean solved) { mSolved = solved; } public String getSuspect() { return mSuspect; } public void setSuspect(String suspect) { mSuspect = suspect; } public String getPhone() { return mPhone; } public void setPhone(String phone) { this.mPhone = phone; } }
再在数据库中加一列:
public class CrimeDbSchema { public static final class CrimeTable { public static final String NAME = "crimes"; public static final class Cols { public static final String UUID = "uuid"; public static final String TITLE = "title"; public static final String DATE = "date"; public static final String SOLVED = "solved"; public static final String SUSPECT = "suspect"; public static final String PHONE = "phone"; } } }
更改CrimeCursorWrapper和CrimeBaseHelper:
public class CrimeCursorWrapper extends CursorWrapper { public CrimeCursorWrapper(Cursor cursor) { super(cursor); } public Crime getCrime() { String uuidString = getString(getColumnIndex(CrimeTable.Cols.UUID)); String title = getString(getColumnIndex(CrimeTable.Cols.TITLE)); long date = getLong(getColumnIndex(CrimeTable.Cols.DATE)); int isSolved = getInt(getColumnIndex(CrimeTable.Cols.SOLVED)); String suspect = getString(getColumnIndex(CrimeTable.Cols.SUSPECT)); String phone = getString(getColumnIndex(CrimeTable.Cols.PHONE)); Crime crime = new Crime(UUID.fromString(uuidString)); crime.setTitle(title); crime.setDate(new Date(date)); crime.setSolved(isSolved != 0); crime.setSuspect(suspect); crime.setPhone(phone); return crime; } }
public void onCreate(SQLiteDatabase db) { db.execSQL("create table " + CrimeTable.NAME + "(" + "_id integer primary key autoincrement, " + CrimeTable.Cols.UUID + ", "+ CrimeTable.Cols.TITLE + ", " + CrimeTable.Cols.DATE + ", " + CrimeTable.Cols.SOLVED + ", " + CrimeTable.Cols.SUSPECT + ", " + CrimeTable.Cols.PHONE + ")" ); }
最后在CrimeFragment中更改onActivityResult():
public void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode != Activity.RESULT_OK) { return; } if (requestCode == REQUEST_DATE) { Date date = (Date) data.getSerializableExtra(DatePickerFragment.EXTRA_DATE); mCrime.setDate(date); updateDate(); } else if (requestCode == REQUEST_CONTACT && data != null) { Uri contactUri = data.getData(); String[] queryFields = new String[] { ContactsContract.Contacts.DISPLAY_NAME, ContactsContract.Contacts._ID }; Cursor c = getActivity().getContentResolver().query(contactUri, queryFields, null, null, null); try { if (c.getCount() == 0) { return; } c.moveToFirst(); String suspect = c.getString(0); String memId = c.getString(1); Cursor phone = getActivity().getContentResolver().query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + memId, null, null); if (phone.moveToNext()) { //取出联系人电话。 String mPhoneNumber = phone.getString( phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); //给当前的Crime对象设置电话号码 mCrime.setPhone(mPhoneNumber); } mCrime.setSuspect(suspect); mSuspectButton.setText(suspect); } finally { c.close(); } } }
第二题在查阅文档时看了一些其他大佬的文档,发现他们的写的更详细,我把链接放在下面:
(1)https://www.cnblogs.com/android-for-dh/p/4449524.html
(2)http://www.bubuko.com/infodetail-2173183.html
最后附上本题源码:Demo
若有不足,敬请指教 :)