weixin_幕布斯4146320
2022-04-10
weixin_慕标3070915
2020-12-18
试着加个动态申请权限试试
慕虎3326924
2020-08-25
方法1:拍照页面跳转 预览界面时不finsh掉当前页面 然后点击某个按钮 finsh掉拍照预览页面 这样就回到拍照页面了
方法2: 直接
intent ---> CustomcameraActivity
qq_慕移动2109012
2020-08-15
qq_慕移动2109012
2020-08-13
在手机 设置->应用->权限 里手动把权限打开
weixin_慕娘3195741
2020-07-10
慕码人8107772
2020-06-08
背景:
在安卓7.0手机上,调用系统相机拍照,结果出现闪退。
原因:
Android7.0中为了提高私有文件的安全性,禁止向你的应用外公开 file:// URI。 如果一项包含文件 file:// URI类型 的 Intent 离开你的应用,应用失败,并出现 FileUriExposedException 异常。
解决方案:
FileProvider是Android 7.0出现的新特性,它是ContentProvider的子类,可以通过创建一个Content URI并赋予临时的文件访问权限来代替File URI实现文件共享。
AndroidMainfest.xml为:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.androidcamera"> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <intent-filter> <action android:name="android.media.action.IMAGE_CAPTURE" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> <!-- android:name="android.support.v4.content.FileProvider" --> <provider android:authorities="com.example.androidcamera.fileprovider" android:name="androidx.core.content.FileProvider" android:grantUriPermissions="true" android:exported="false"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/filepaths"/> </provider> </application> </manifest>
在res--->增加xml文件夹---->增加filepaths.xml文件
<?xml version="1.0" encoding="utf-8"?> <resources> <paths> <external-path name="external_path" path="." /> </paths> </resources>
修改MainActivity.java文件为
package com.example.androidcamera;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.FileProvider;
import android.content.ActivityNotFoundException;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.view.View;
import android.widget.ImageView;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class MainActivity extends AppCompatActivity {
private static int REQ_1 = 1;
private static int REQ_2 = 2;
private ImageView mImageView;
private String mFilePath;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mImageView = (ImageView) findViewById(R.id.iv);
mFilePath = Environment.getExternalStorageDirectory().getPath();
mFilePath = mFilePath + "/" + "temp.png";
}
public void startCamera1(View view){
Intent intent= new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, REQ_1);
}
public void startCamera2(View view){
Intent intent= new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
// Uri photoUri = Uri.fromFile(new File(mFilePath));
Uri photoUri = getUriForFile(MainActivity.this,new File(mFilePath));
intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
startActivityForResult(intent, REQ_2);
}
private static Uri getUriForFile(Context context, File file) {
if (context == null || file == null) {
throw new NullPointerException();
}
Uri uri;
//判断是否是AndroidN以及更高的版本
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
//如果SDK版本>=24,即:Build.VERSION.SDK_INT >= 24
// uri = FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID + ".fileProvider", file);
uri = FileProvider.getUriForFile(context, "com.example.androidcamera.fileprovider", file);
} else {
uri = Uri.fromFile(file);
}
return uri;
}
private Intent getInstallIntent() {
String savePath = "null";
String appName = "AndroidCamera";
String fileName = savePath + appName + ".apk";
Uri uri = null;
Intent intent = new Intent(Intent.ACTION_VIEW);
try {
if (Build.VERSION.SDK_INT >= 24) {//7.0 Android N
//com.xxx.xxx.fileprovider为上述manifest中provider所配置相同
Context mContext = null;
uri = FileProvider.getUriForFile(mContext, "com.example.androidcamera.fileprovider", new File(fileName));
intent.setAction(Intent.ACTION_INSTALL_PACKAGE);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);//7.0以后,系统要求授予临时uri读取权限,安装完毕以后,系统会自动收回权限,该过程没有用户交互
} else {//7.0以下
uri = Uri.fromFile(new File(fileName));
intent.setAction(Intent.ACTION_VIEW);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
}
intent.setDataAndType(uri, "application/vnd.android.package-archive");
startActivity(intent);
return intent;
} catch (IllegalArgumentException e) {
e.printStackTrace();
e.printStackTrace();
}catch (Exception e){
}
return intent;
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
if (requestCode == REQ_1) {
Bundle bundle = data.getExtras();
Bitmap bitmap = (Bitmap) bundle.get("data");
mImageView.setImageBitmap(bitmap);
} else if (requestCode == REQ_2) {
FileInputStream fis = null;
try {
fis =new FileInputStream(mFilePath);
Bitmap bitmap = BitmapFactory.decodeStream(fis);
mImageView.setImageBitmap(bitmap);
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
}这们startCamera2就能在真手机上打开拍照了。
慕粉1315537407
2020-05-18
慕粉9399637
2020-05-06
慕斯卡4052274
2020-04-20
求回答加一,我也有这种问题
qq_慕码人935710
2020-04-10
/** Standard activity result: operation succeeded. */ public static final int RESULT_OK = -1;
它是Activity类中的一个静态常量,当打开系统页面并成功返回数据后,
onActivityResult()方法中会把它作为resultCode返回,表示成功返回结果
慕的地5182032
2020-03-15
ctrl + 1 提示修复
weibo_机场逮蚂蚁_0
2020-03-14
那是因为data自动帮你保存了一张缩略图,你自己去重新定义一个路径,然后从这个路径中读取内容,再解析出来显示的就是原图
移动客户端
2020-02-27
weixin_慕码人3589423
2020-01-01
雎山月
2019-12-24
请问怎么解决的?
qq_慕容8343872
2019-11-12
修改模拟器,让模拟器具备摄像头
千里孤坟
2019-10-23
Py_JOYEN
2019-10-19
qq_慕用6029974
2019-10-03
慕运维9472019
2019-08-20
要把拍照的原图显示到Imageview上,图片内存太大导致内存溢出
慕运维9472019
2019-08-20
这才多少代码,自己敲一下就有了
慕码人5388593
2019-07-04
2019年7月17日21:29:35 现在好了,火钳刘明
慕粉1509133595
2019-06-04
奕燚
2019-05-18
权限没有给吧,清单文件和动态权限,还有7.0文件存储问题
源能量
2019-05-04
熟能生巧
qq_慕的地3527064
2019-02-25
xml里面的id不是iv 或者还没有定义ImageView的id
Kevin好好先生
2019-02-21

这个方法改一下
qq_慕九州214653
2019-02-11
qq_布莱恩卓德_03284580
2019-01-06
https://github.com/EddyAnd/PlayMusicDemo.git