私はAndroidのWanji天は、多くの人々は、私が試した、と言う、カメラアンドロイドコール(撮影)と一緒に写真を撮るのが好き、そして生き残る、インターネットBaiduのだろう、彼の心はノートを湧き、移動しませんでし果たしたこれらの二日間7.0それは、廃棄物、それに興味を持って見て意味ので、私は、私手動でオープンなアクセス許可、書いていない許可ダイナミックに申請する許可のための7.0アプリケーションで成功し、そうでない場合は理由ダイナミックに非常に簡単に次のよう。
最初の拒絶レイアウトファイルのコード:
<xmlのバージョン= "1.0"エンコード= "UTF-8"?> <android.support.constraint.ConstraintLayout のxmlns:アンドロイド= "http://schemas.android.com/apk/res/android" のxmlns:アプリ= "http://schemas.android.com/apk/res-auto" のxmlns:ツール= "http://schemas.android.com/tools" のandroid:layout_width = "match_parent" のandroid:layout_height = "match_parent" ツール:コンテキスト= "com.example.paizhao.MainActivity"> <ボタン アンドロイド:IDを= "@ + ID / take_photo" アンドロイド:テキスト= "拍照" のandroid:layout_width = "368dp" のandroid:layout_height = "wrap_content" ツール:layout_editor_absoluteY = "0dp" ツール:layout_editor_absoluteX = "8DP" /> <ImageViewの アンドロイド:ID = "@ + ID /絵" アンドロイド:layout_width = "wrap_content" のandroid:layout_height = "wrap_content" アンドロイド:layout_gravity = "center_horizontal" ツール:layout_editor_absoluteY = "0dp" ツール:layout_editor_absoluteX = "0dp" /> </ android.support.constraint.ConstraintLayout>
レイアウトコード、それは自分自身をコピーすることができますので、問題ではありません。
そして、MainActivityを初期化します。
輸入android.content.Intent; 輸入android.graphics.Bitmap; 輸入android.graphics.BitmapFactory; 輸入android.net.Uri; 輸入android.os.Build; 輸入android.provider.MediaStore; 輸入android.support.v4.content.FileProvider; 輸入android.support.v7.app.AppCompatActivity; 輸入android.os.Bundle; 輸入android.view.View; 輸入android.widget.Button; 輸入android.widget.ImageView; インポートのjava.io.File; 輸入java.io.FileNotFoundException。 インポートにjava.io.IOException; パブリッククラスMainActivityはAppCompatActivity {拡張 プライベートボタンBTNを; //拍照按钮 プライベートウリImageUri; //储存图片地址 プライベートImageViewの画像; //显示图片用的ImageViewの public static final int型のTAKE_PHOTO = 1; 保護されたボイドのonCreate(バンドルsavedInstanceState){ super.onCreate(savedInstanceState)。 setContentView(R.layout.activity_main)。 BTN =(ボタン)findViewById(R.id.take_photo); //加上IDの 画像=(ImageViewの)findViewById(R.id.picture)。 } }
そして、より多くの嫌なところがあります
btn.setOnClickListener(新しいView.OnClickListener(){ @Override ます。public void onClickの(ビューV){ ファイルoutputImage =新しいファイル(getExternalCacheDir()、 "outputImage.jpg"); 試み{ 場合(outputImage.exists()){ outputImage .delete(); } outputImage.createNewFile(); }キャッチ(例外:IOException e)の{ e.printStackTrace(); } IF(Build.VERSION.SDK_INT> = 24){//この場所は7.0より大きいのAndroidのバージョンかどうかを判断し、もしそれが24より大きい場合、彼のバージョンが7.0以上であります ImageUri = FileProvider.getUriForFile(MainActivity.this、 "com.example.paizhao.FileProvider"、outputImage); / /转型骚操作、利用FileProvider转型、由ファイル类型转成コンテンツ类型 外部にシステムの//アンドロイド7.0アプリケーションが禁止されています開いているファイル:// URIので、我々は移行する必要があります。 // FileProviderは、使用するためのアプリケーション間のプライベートファイル転送がAndroidManifest前に登録されるのContentProviderのサブクラスである 他{} ImageUri = Uri.fromFile(outputImage) のSystem.out.println(ImageUri); } テント=インテント新しい新しいテント( "android.media.action.IMAGE_CAPTURE"); intent.putExtra(MediaStore.EXTRA_OUTPUT、ImageUri); startActivityForResult(テント、TAKE_PHOTO); } })。
表示画像:
保護された無効onActivityResult(int型requestCode、int型のresultCode、テントデータ){ スイッチ(requestCode){ ケースTAKE_PHOTO: もし(resultCodeが== RESULT_OK){ 試み{ //将拍摄的照片显示出来 ビットマップビットマップ= BitmapFactory.decodeStream(getContentResolver() .openInputStream(ImageUri))。 picture.setImageBitmap(ビットマップ); }キャッチ(にFileNotFoundException電子){ e.printStackTrace(); } } ブレーク。 デフォルト: 休憩; } }
その後で7.0以上のユニークなものである登録FileProvider AndroidManifest。
<プロバイダ アンドロイド:名=「android.support.v4.content.FileProvider」 アンドロイド:当局=「com.example.paizhao.FileProvider」//いくつかの学生が直接コードをコピーし、その結果、崩壊を落ちることはありません、当局があなたのしている防ぎますパッケージ名+ FileProvider、第二引数以上FileProvider.getUriForFile、それは正確に等しくなければなりません。 アンドロイド:エクスポート= "false"を//が直接のようにコピー休む アンドロイド:grantUriPermissions = "trueに"> <メタデータ アンドロイド:名= "android.support.FILE_PROVIDER_PATHS" アンドロイド:リソース= "@ XML / file_paths" /> </プロバイダ>
フレーズを追加します。またにAndroidManifest、一見以下の7.0を使用します
<用途許可は、Android:名= "android.permission.WRITE_EXTERNAL_STORAGE" /> < -调用相机权限! - > <用途許可は、Android:名= "android.permission.CAMERA" />
まあ、それを試して行きます。