《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
若有不足,敬请指教 :)