public class MainActivity extends AppCompatActivity { Context context; String croppedFolderName = "/DCIM/PhotoTemp"; File outputFile = null; String outputFileName="myprofile.jpg"; private ImageView imageView;
private BackPressHandler backPressHandler; DownloadFileFromURL downloadFileAsyncTask; ProgressBar progressBar;
PermissionListener permissionlistener = new PermissionListener() { @Override public void onPermissionGranted() { initView(); }
@Override public void onPermissionDenied(ArrayList<String> deniedPermissions) { Toast.makeText(MainActivity.this, "권한 허용을 하지 않으면 서비스를 이용할 수 없습니다.", Toast.LENGTH_SHORT).show(); } };
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); context = this.getBaseContext();
backPressHandler = new BackPressHandler(this); // 뒤로 가기 버튼 이벤트
NonSecretApp_Setting(); // 출처를 알 수 없는 앱 설정 화면 띄우기 checkPermissions(); }
private void checkPermissions() { if (Build.VERSION.SDK_INT >= 23){ // 마시멜로(안드로이드 6.0) 이상 권한 체크 TedPermission.with(context) .setPermissionListener(permissionlistener) .setRationaleMessage("이미지를 다루기 위해서는 접근 권한이 필요합니다") .setDeniedMessage("앱에서 요구하는 권한설정이 필요합니다...\n [설정] > [권한] 에서 사용으로 활성화해주세요.") .setPermissions(new String[] { Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA}) .check();
} else { initView(); } }
private void initView() { imageView = (ImageView) findViewById(R.id.cropImageView); Button btn_downloadPhoto = (Button) findViewById(R.id.btn_PhotoDownload); btn_downloadPhoto.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (NetworkHelper.checkConnection(context)) { // 인터넷 연결 체크 Log.d("Photo", "Photo Upload Task Start"); String PhotoURL = Value.IPADDRESS + "/myphoto.jpg"; downloadFileAsyncTask = new DownloadFileFromURL(); downloadFileAsyncTask.execute(PhotoURL); } else { Toast.makeText(context, "인터넷 연결을 확인하세요", Toast.LENGTH_LONG).show(); } } });
}
class DownloadFileFromURL extends AsyncTask<String, Integer, String> {
@Override protected void onPreExecute() { super.onPreExecute(); }
@Override protected String doInBackground(String... apkurl) { int count; int lenghtOfFile = 0; InputStream input = null; OutputStream fos = null;
try { URL url = new URL(apkurl[0]); URLConnection connection = url.openConnection(); connection.connect();
lenghtOfFile = connection.getContentLength(); // 파일 크기를 가져옴
File path = new File(Environment.getExternalStorageDirectory() + croppedFolderName); if (! path.exists()) path.mkdirs(); // 디렉토리가 없으면 생성 outputFile = new File(path, outputFileName); if (outputFile.exists()) { // 기존 파일 존재시 삭제하고 다운로드 outputFile.delete(); }
input = new BufferedInputStream(url.openStream()); fos = new FileOutputStream(outputFile); byte data[] = new byte[1024]; long total = 0;
while ((count = input.read(data)) != -1) { if (isCancelled()) { input.close(); return String.valueOf(-1); } total = total + count; if (lenghtOfFile > 0) { // 파일 총 크기가 0 보다 크면 publishProgress((int) (total * 100 / lenghtOfFile)); } fos.write(data, 0, count); // 파일에 데이터를 기록 }
fos.flush();
} catch (Exception e) { e.printStackTrace(); Log.e("UpdateAPP", "Update error! " + e.getMessage()); } finally { if (input != null) { try { input.close(); } catch(IOException ioex) { //Very bad things just happened... handle it } } if (fos != null) { try { fos.close(); } catch(IOException ioex) { //Very bad things just happened... handle it } } } return null; }
protected void onProgressUpdate(Integer... progress) { super.onProgressUpdate(progress); // 백그라운드 작업의 진행상태를 표시하기 위해서 호출하는 메소드 }
protected void onPostExecute(String result) { if (result == null) { // 미디어 스캐닝 MediaScannerConnection.scanFile(getApplicationContext(), new String[]{outputFile.getAbsolutePath()}, null, new MediaScannerConnection.OnScanCompletedListener() { @Override public void onScanCompleted(String s, Uri uri) { } });
String imageUri = outputFile.getAbsolutePath(); Glide.with(context).load(imageUri).into(imageView); } else { Toast.makeText(getApplicationContext(), "다운로드 에러", Toast.LENGTH_LONG).show(); } }
protected void onCancelled() { // cancel메소드를 호출하면 자동으로 호출되는 메소드 progressBar.setProgress(0); } }
private void NonSecretApp_Setting() { if(Build.VERSION.SDK_INT >= 26) { // 출처를 알 수 없는 앱 설정 화면 띄우기 PackageManager packageManager = getPackageManager(); boolean isTrue = packageManager.canRequestPackageInstalls();
if (!packageManager.canRequestPackageInstalls()) { AlertDialog.Builder b = new AlertDialog.Builder(this, android.R.style.Theme_DeviceDefault_Light_Dialog); b.setTitle("알림"); b.setMessage("보안을 위해 스마트폰 환경설정의 '앱 설치 허용'을 설정해 주시기 바랍니다.설정화면으로 이동하시겠습니까?"); b.setCancelable(false); b.setPositiveButton("설정하기", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES); intent.setData(Uri.parse("package:" + getPackageName())); startActivity(intent); } });
b.setNegativeButton("건너띄기", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) {
} }); b.show(); } } }
@Override public void onBackPressed() { backPressHandler.onBackPressed(); } }
|