Android Studio(五)CriminalIntent—隐式intent、使用intent拍照

本文总结了《Android编程权威指南》第三版第15、16章内容,介绍了如何在Android应用中使用隐式intent启动其他应用的activity,特别是发送短消息给Crime嫌疑人。此外,还讲解了如何通过intent实现拍照功能,包括文件存储、相机intent的使用、图片缩放和显示。代码示例展示了如何在CrimeFragment中添加相关功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android Studio(五)CriminalIntent—5.隐式intent、6.使用intent拍照

Android编程权威指南 第3版 第15、16章 学习总结
代码来源于《Android编程权威指南》第三版
14-4F-8A-A2-D1-90 60 7
14-4F-8A-A2-D1-90 60 8
以下操作基于上一个blog已完成的基础上进行的

隐式intent

在Android系统中,可利用隐式intent启动其他应用的activity。在显式intent中,我们]指定要启动的activity类,操作系统会负责启动它。在隐式intent中,我们只要描述要完成的任务,操作系统就会找到合适的应用,并在其中启动相应的activity。我们将使用隐式intent发送短消息给Crime嫌疑人。用户首先从某个联系人应用中选取联系人,然后从短消息应用列表中选取目标应用发送消息。
创建隐式intent之前,需完成以下准备工作:
●在CrimeF ragment的布局上添加CHOOSE SUSPECT按钮和SEND CRIME REPORT按钮;
●在Crime类中添加保存嫌疑人姓名的mSuspect变量;
●使用格式化的字符串资源创建消息模板。

具体步骤分为
1、添加按钮主键
2、添加嫌疑人信息至模型层
3、使用格式化字符串
4、使用隐式intent

更改后的完整代码如下,其余的具体步骤依照书上来,有不懂的代码请参考书本第15章的内容。
strings.xml

<resources>
    <string name="app_name">CriminalIntent</string>
    <string name="crime_title_hint">Enter a title for the crime.</string>
    <string name="crime_title_label">Title</string>
    <string name="crime_details_label">Details</string>
    <string name="crime_solved_label">Solved</string>
    <string name="date_picker_title">Date of crime:</string>
    <string name="new_crime">New Crime</string>
    <string name="show_subtitle">Show Subtitle</string>
    <string name="hide_subtitle">Hide Subtitle</string>
    <string name="subtitle_format">%1$d crimes</string>
    <string name="crime_suspect_text">Choose Suspect</string>
    <string name="crime_report_text">Send Crime Report</string>
    <string name="crime_report">%1$s!
    The crime was discovered on %2$s. %3$s, and %4$s
  </string>
    <string name="crime_report_solved">The case is solved</string>
    <string name="crime_report_unsolved">The case is not solved</string>
    <string name="crime_report_no_suspect">there is no suspect.</string>
    <string name="crime_report_suspect">the suspect is %s.</string>
    <string name="crime_report_subject">CriminalIntent Crime Report</string>
    <string name="send_report">Send crime report via</string>
</resources>

Crime.java

public class Crime {
   

    private UUID mId;
    private String mTitle;
    private Date mDate;
    private boolean mSolved;
    private String mSuspect;

    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 void setTitle(String title) {
   
        mTitle = title;
    }

    public Date getDate() {
   
        return mDate;
    }

    public void setDate(Date date) {
   
        mDate = date;
    }

    public boolean isSolved() {
   
        return mSolved;
    }

    public void setSolved(boolean solved) {
   
        mSolved = solved;
    }

    public String getSuspect() {
   
        return mSuspect;
    }

    public void setSuspect(String suspect) {
   
        mSuspect = suspect;
    }
}

CrimeDbSchema.java

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";
        }
    }
}

CrimeBaseHelper.java

public class CrimeBaseHelper extends SQLiteOpenHelper {
   
    private static final int VERSION = 1;
    private static final String DATABASE_NAME = "crimeBase.db";

    public CrimeBaseHelper(Context context) {
   
        super(context, DATABASE_NAME, null, VERSION);
    }

    @Override
    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 +
                ")"
        );
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
   
    }
}

CrimeLab.java

public class CrimeLab {
   
    private static CrimeLab sCrimeLab;
    private Context mContext;
    private SQLiteDatabase mDatabase;

    public static CrimeLab get(Context context) {
   
        if (sCrimeLab == null) {
   
            sCrimeLab = new CrimeLab(context);
        }

        return sCrimeLab;
    }

    private CrimeLab(Context context) {
   
        mContext = context.getApplicationContext();
        mDatabase = new CrimeBaseHelper(mContext)
                .getWritableDatabase();

    }

    public void addCrime(Crime c) {
   
        ContentValues values = getContentValues(c);
        mDatabase.insert(CrimeTable.NAME, null, values);
    }

    public List<Crime> getCrimes() {
   
        List<Crime> crimes = new ArrayList<>();
        CrimeCursorWrapper cursor = queryCrimes(null, null);
        try {
   
            cursor.moveToFirst();
            while (!cursor.isAfterLast()) {
   
                crimes.add(cursor.getCrime());
                cursor.moveToNext();
            }
        } finally {
   
            cursor.close();
        }
        return crimes;
    }

    public Crime getCrime(UUID id) {
   
        CrimeCursorWrapper cursor = queryCrimes(
                CrimeTable.Cols.UUID + " = ?",
                new String[]{
   id.toString()}
        );
        try {
   
            if (cursor.getCount() == 0) {
   
                return null;
            }
            cursor.moveToFirst();
            return cursor.getCrime();
        } finally {
   
            cursor.close();
        }
    }

    public void updateCrime(Crime crime) {
   
        String uuidString = crime.getId().toString();
        ContentValues values = getContentValues(crime);
        mDatabase.update(CrimeTable.NAME, values,
                CrimeTable.Cols.UUID + " = ?",
                new String[]{
   uuidString});
    }

    private CrimeCursorWrapper queryCrimes(String whereClause, String[] whereArgs) {
   
        Cursor cursor = mDatabase.query(
                CrimeTable.NAME,
                null, // Columns - null selects all columns
                whereClause,
                whereArgs,
                null, // groupBy
                null, // having
                null  // orderBy
        );
        return new CrimeCursorWrapper(cursor);
    }

    private static ContentValues getContentValues(Crime crime) {
   
        ContentValues values = new ContentValues();
        values.put(UUID, crime.getId().toString());
        values.put
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值