Android初學第72天

來源:互聯網
上載者:User

標籤:stc   got   orm   apt   turn   rmi   nerd   ide   ret   

Android初學第72天

16_CameraIntent

代碼CriminalintentCrimeFragment.java
package com.bignerdranch.android.criminalintent;import android.app.Activity;import android.content.Intent;import android.content.pm.PackageManager;import android.content.pm.ResolveInfo;import android.database.Cursor;import android.graphics.Bitmap;import android.net.Uri;import android.os.Bundle;import android.provider.ContactsContract;import android.provider.MediaStore;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentManager;import android.support.v4.content.FileProvider;import android.text.Editable;import android.text.TextWatcher;import android.text.format.DateFormat;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.Button;import android.widget.CheckBox;import android.widget.CompoundButton;import android.widget.EditText;import android.widget.ImageButton;import android.widget.ImageView;import java.io.File;import java.util.Date;import java.util.List;import java.util.UUID;import static android.widget.CompoundButton.*;public class CrimeFragment extends Fragment {    private static final String ARG_CRIME_ID = "crime_id";    private static final String DIALOG_DATE = "DialogDate";    private static final int REQUEST_DATE = 0;    private static final int REQUEST_CONTACT = 1;    private static final int REQUEST_PHOTO = 2;    private Crime mCrime;    private File mPhotoFile;    private EditText mTitleField;    private Button mDateButton;    private CheckBox mSolvedCheckbox;    private Button mReportButton;    private Button mSuspectButton;    private ImageButton mPhotoButton;    private ImageView mPhotoView;    public static CrimeFragment newInstance(UUID crimeId) {        Bundle args = new Bundle();        args.putSerializable(ARG_CRIME_ID, crimeId);        CrimeFragment fragment = new CrimeFragment();        fragment.setArguments(args);        return fragment;    }    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        UUID crimeId = (UUID) getArguments().getSerializable(ARG_CRIME_ID);        mCrime = CrimeLab.get(getActivity()).getCrime(crimeId);        mPhotoFile = CrimeLab.get(getActivity()).getPhotoFile(mCrime);    }    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container,                             Bundle savedInstanceState) {        View v = inflater.inflate(R.layout.fragment_crime, container, false);        mTitleField = (EditText) v.findViewById(R.id.crime_title);        mTitleField.setText(mCrime.getTitle());        mTitleField.addTextChangedListener(new TextWatcher() {            @Override            public void beforeTextChanged(CharSequence s, int start, int count, int after) {            }            @Override            public void onTextChanged(CharSequence s, int start, int before, int count) {                mCrime.setTitle(s.toString());            }            @Override            public void afterTextChanged(Editable s) {            }        });        mDateButton = (Button) v.findViewById(R.id.crime_date);        updateDate();        mDateButton.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                FragmentManager manager = getFragmentManager();                DatePickerFragment dialog = DatePickerFragment                        .newInstance(mCrime.getDate());                dialog.setTargetFragment(CrimeFragment.this, REQUEST_DATE);                dialog.show(manager, DIALOG_DATE);            }        });        mSolvedCheckbox = (CheckBox) v.findViewById(R.id.crime_solved);        mSolvedCheckbox.setChecked(mCrime.isSolved());        mSolvedCheckbox.setOnCheckedChangeListener(new OnCheckedChangeListener() {            @Override            public void onCheckedChanged(CompoundButton buttonView,                     boolean isChecked) {                mCrime.setSolved(isChecked);            }        });        mReportButton = (Button) v.findViewById(R.id.crime_report);        mReportButton.setOnClickListener(new View.OnClickListener() {            public void onClick(View v) {                Intent i = new Intent(Intent.ACTION_SEND);                i.setType("text/plain");                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));                startActivity(i);            }        });        final Intent pickContact = new Intent(Intent.ACTION_PICK,                ContactsContract.Contacts.CONTENT_URI);        mSuspectButton = (Button) v.findViewById(R.id.crime_suspect);        mSuspectButton.setOnClickListener(new View.OnClickListener() {            public void onClick(View v) {                startActivityForResult(pickContact, REQUEST_CONTACT);            }        });        if (mCrime.getSuspect() != null) {            mSuspectButton.setText(mCrime.getSuspect());        }        PackageManager packageManager = getActivity().getPackageManager();        if (packageManager.resolveActivity(pickContact,                PackageManager.MATCH_DEFAULT_ONLY) == null) {            mSuspectButton.setEnabled(false);        }        mPhotoButton = (ImageButton) v.findViewById(R.id.crime_camera);        final Intent captureImage = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);        boolean canTakePhoto = mPhotoFile != null &&                captureImage.resolveActivity(packageManager) != null;        mPhotoButton.setEnabled(canTakePhoto);        mPhotoButton.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                Uri uri = FileProvider.getUriForFile(getActivity(),                        "com.bignerdranch.android.criminalintent.fileprovider",                        mPhotoFile);                captureImage.putExtra(MediaStore.EXTRA_OUTPUT, uri);                List<ResolveInfo> cameraActivities = getActivity()                        .getPackageManager().queryIntentActivities(captureImage,                                PackageManager.MATCH_DEFAULT_ONLY);                for (ResolveInfo activity : cameraActivities) {                    getActivity().grantUriPermission(activity.activityInfo.packageName,                            uri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION);                }                startActivityForResult(captureImage, REQUEST_PHOTO);            }        });        mPhotoView = (ImageView) v.findViewById(R.id.crime_photo);        updatePhotoView();        return v;    }    @Override    public void onPause() {        super.onPause();        CrimeLab.get(getActivity())                .updateCrime(mCrime);    }    @Override    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();            // Specify which fields you want your query to return            // values for.            String[] queryFields = new String[]{                    ContactsContract.Contacts.DISPLAY_NAME            };            // Perform your query - the contactUri is like a "where"            // clause here            Cursor c = getActivity().getContentResolver()                    .query(contactUri, queryFields, null, null, null);            try {                // Double-check that you actually got results                if (c.getCount() == 0) {                    return;                }                // Pull out the first column of the first row of data -                // that is your suspect‘s name.                c.moveToFirst();                String suspect = c.getString(0);                mCrime.setSuspect(suspect);                mSuspectButton.setText(suspect);            } finally {                c.close();            }        } else if (requestCode == REQUEST_PHOTO) {            Uri uri = FileProvider.getUriForFile(getActivity(),                    "com.bignerdranch.android.criminalintent.fileprovider",                    mPhotoFile);            getActivity().revokeUriPermission(uri,                    Intent.FLAG_GRANT_WRITE_URI_PERMISSION);            updatePhotoView();        }    }    private void updateDate() {        mDateButton.setText(mCrime.getDate().toString());    }    private String getCrimeReport() {        String solvedString = null;        if (mCrime.isSolved()) {            solvedString = getString(R.string.crime_report_solved);        } else {            solvedString = getString(R.string.crime_report_unsolved);        }        String dateFormat = "EEE, MMM dd";        String dateString = DateFormat.format(dateFormat, mCrime.getDate()).toString();        String suspect = mCrime.getSuspect();        if (suspect == null) {            suspect = getString(R.string.crime_report_no_suspect);        } else {            suspect = getString(R.string.crime_report_suspect, suspect);        }        String report = getString(R.string.crime_report,                mCrime.getTitle(), dateString, solvedString, suspect);        return report;    }    private void updatePhotoView() {        if (mPhotoFile == null || !mPhotoFile.exists()) {            mPhotoView.setImageDrawable(null);        } else {            Bitmap bitmap = PictureUtils.getScaledBitmap(                    mPhotoFile.getPath(), getActivity());            mPhotoView.setImageBitmap(bitmap);        }    }}

Android初學第72天

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.