Android 7.0 당신 이 주의해 야 할 구덩이 들
7245 단어 Android
1. AndroidMainifest. xml 파일 에 추가:
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths"/>
provider>
authorities: app 의 패키지 이름. fileProvider grantUriPermissions: true, URI 임시 접근 권한 exported: false resource: 다음 에 추 가 된 파일 을 표시 합 니 다.
2. res 아래 xml 라 는 파일 가 를 새로 만 들 고 파일 provider 를 새로 만 듭 니 다.paths:
<paths>
<external-path
name="files_root"
path="Android/data/com.example.downloadapk/"/>
<external-path
name="external_storage_root"
path="."/>
paths>
path: 임시 권한 이 필요 한 접근 경로 (. 모든 경 로 를 대표 함) name: 접근 경로 이름
3. apk 파일 설치:
/**
* apk
*
* @param apkFile
*/
private void installApk(File apkFile) {
Intent intent = new Intent(Intent.ACTION_VIEW);
try {
String[] command = {"chmod", "777", apkFile.toString()};
ProcessBuilder builder = new ProcessBuilder(command);
builder.start();
} catch (IOException ignored) {
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
Uri contentUri = FileProvider.getUriForFile(getApplicationContext(),
BuildConfig.APPLICATION_ID + ".fileProvider", apkFile);
intent.setDataAndType(contentUri, "application/vnd.android.package-archive");
} else {
intent.setDataAndType(Uri.fromFile(apkFile), "application/vnd.android.package-archive");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
}
startActivity(intent);
}
2. 시스템 카메라 충돌 해결 android. os. FileUriExposedException
1. 우선 AndroidManifest. xml 에서 설명 합 니 다.
<provider
android:name=".ImagePickerProvider"
android:authorities="${applicationId}.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths" />
provider>
2 、 provider 만 들 기paths. xml 파일 은 res 폴 더 아래 xml 폴 더 아래 에 있 습 니 다.
res/xml/provider_paths.xml
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="external_files" path="."/>
paths>
3. 적당 한 곳 에서 교체 하기
Uri uri;
if (VERSION.SDK_INT <= VERSION_CODES.M){
uri = Uri.fromFile(takeImageFile);
}else{
/**
* 7.0 Uri , FileProvider
* MIUI size 0
*/
uri = FileProvider.getUriForFile(activity, ProviderUtil.getFileProviderName(activity), takeImageFile);
}
Log.e("nanchen",ProviderUtil.getFileProviderName(activity));
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,uri);
import android.content.Context;
/**
* provider util
*
* Date: 2017-03-23 12:21
*/
public class ProviderUtil {
public static String getFileProviderName(Context context){
return context.getPackageName()+".provider";
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.