2018.08.19 00:08


아래와 같은 AndroidRuntime Error 메시지 발생시

android.os.FileUriExposedException: file:///storage/emulated/0/1534602883975.jpg exposed beyond app through ClipData.Item.getUri() 

android.os.StrictMode.onFileUriExposed(StrictMode.java:1960) 

at android.net.Uri.checkFileUriExposed(Uri.java:2356) 


위와같이 FileUriExposedException 발생하는 경우 


안드로이드 7.0 부터 Uri.fromFile() 사용 시 개인 파일의 보안을 강화하기 위해 개인 디렉토리의 액세스를 제한하여 SecurityException과 FileUriExposedException이 발생할 수 있다.

따라서 Uri클래스의 fromFile()를 통해 얻어온 Uri(“file://…”)가 카메라앱으로 공유함으로써 발생한 오류이다.

따라서 해결책으로 FileProvider 사용을 해야 한다.


FileProvider 관련 Google Android 링크

android 7.0 관련 수정사항



FileProvider 사용방법

  1. res> xml> file paths.xml 파일 생성

 

  1. AndroidManifest.xml에 Provider 추가.

 

  1. Uri.fromFile() 대신 FileProvider.getUriForFile

 

 



Posted by injunech
2018.05.21 04:59


Shutdown 명령어 Windows 종료


1) Ctrl + R

2) shutdown -f -s -t 600


1) 키보드의 로고+R 키를 눌러 실행창에 cmd 를 입력 후 엔터를 눌러 명령프롬프트를 엽니다.

2) 명령프롬프트에 shutdown -f -s -t 600 을 입력하고 엔터를 누르면 600초=10분 이후에

  시스템 자동으로 종료가 됩니다.


입력한 명령어의 매개변수

 -f 사용자에게 미리 경고하지 않고 실행 중인 응용 프로그램을 강제로 닫음

 -s 컴퓨터 종료 의미

 -t 초단위의 종료 예약 시간



'Operating System > Windows' 카테고리의 다른 글

Shutdown 명령어 Windows 종료  (0) 2018.05.21
아이콘 설정 방법  (0) 2017.03.12
File Manager 무료SW 더블커맨더 (double commander)  (0) 2016.09.04
Windows 10 단축키  (0) 2015.08.04
Windows 설정  (0) 2015.06.02
Window PowerShell  (0) 2015.03.14


Posted by injunech
2018.05.13 21:48


[Android] Handler Message obj 전달 (what, arg1, arg2)

android.os.Handler 를 이용해서 다른 쓰레드에서의 UI를 핸들링 하려면 Message object 를 전달하여 Handler 내부에서 처리한다.


안드로이드에서 작업시 통신이나 기타 작업을 위해서 쓰레드를 이용하는 경우에 타 쓰레드에서 액티비티 등의 UI 를 변경할 경우 android.os.Handler 를 사용하게 됩니다.


Handler 클래스를 Activity 클래스 내에서 정의 해 줍니다.

Handler handler = new Handler() { // 메인에서 생성한 핸들러
@Override
public void handleMessage(Message msg) {
if(msg.what == 0){
// 메세지를 통해 받은 값을 TextView에 출력
textView.setText("arg1="+msg.arg1);
textView.setText("arg2="+msg.arg2);
}
}
};


쓰레드에서 액티비티의 UI 를 변경해야 할 경우 액티비티의 핸들러에게 메시지를 보냅니다. 쓰레드로 핸들러 인스턴스를 넘겨주는 방법은 각자 필요에 맞게 넘겨주면 됩니다.

// obtain 메소드로 메세지 생성
Message msg = Message.obtain(mHandler, 0, arg1, arg2);
mHandler.sendMessage(msg); // 메인스레드의 핸들러에 메세지 보내기





Posted by injunech