- Android Webview Cache 삭제
webView.clearCache(true);
webView.clearHistory();
webView.loadUrl(authorizeURL);
- Android PDF파일 다른앱으로 전송하기
File outputFile = new File(filePath);
Uri uri = FileProvider.getUriForFile(ReportActivity.this, "com.example.test.provider_paths", outputFile);
// API Level 24 버전부터 특정 파일이나 폴더를 다른 앱으로 전달하려면 FileProvider 를 사용해야 한다.
// Uri uri = Uri.fromFile(outputFile);
// 위에꺼를 사용한다면 아래와 같은 Exception 을 만나게 된다
android.os.FileUriExposedException: file:///storage/emulated... exposed beyond app through Intent.getData()
Intent share = new Intent();
share.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
share.setAction(Intent.ACTION_SEND);
share.setType("application/pdf");
share.putExtra(Intent.EXTRA_STREAM, uri);
share = Intent.createChooser(share, "전송");
// intent.createChooser() 를 사용하는 이유는 매번 전송할 앱을 선택하기 위함이다. 이것을 사용하지 않으면 처음에 선택한 앱으로만 계속 전달이 된다.
startActivity(share);
참고 : https://stackoverflow.com/a/38858040/3897810
* 추가
: 외부 앱에 파일 정보 공유를 하는데 API Level 24 부터 file:// URI의 노추을 금지하는 스트릭트(strict) 모드 정책을 적용. 앱 간에 파일을 공유하려면 content:// URI 를 보내고 이 URI에 대해 임시 액세스 권한을 부여해야 한다. 그리고 이 권한을 쉽게 부여하려면 FileProvider 클래스를 이용해야 한다.
FileProvider 클래스는 Support 라이브러리 v4d에서 제공하는 콘텐츠 프로바이더, XML로 제공하는 설정을 기반으로 파일들에 대한 Content URI를 생성해 준다. FileProvider 를 이용하려면 res/xml 폴더에 임의의 이름으로 XML 파일을 만들어 줘야한다.
파일명 : provider_paths
<path xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="myfiiles" path="."/>
</path>
<external-path> 는 외부 저장 공간의 파일을 공유하기 위해 사용. <file-path> 는 내부 저장 공간의 파일을 공유하기 위해 사용.
그리고 위의 FileProvider 를 AndroidManifest.xml 에 등록해야 한다.
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.example.test.provider_paths"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths"/>
</provider>
참고 : 깡샘의 안드로이드 프로그래밍
- Android 해당 폴더의 파일 개수 가져오기
File dir = new File(mFolderPath);
int fileCount = 0;
for (String fileName : dir.list()) {
if (fileName.contains(mTargetPdfName)) {
fileCount++;
}
}
참고 : https://stackoverflow.com/q/12928303/3897810