카테고리 없음
android 스크린샷 이벤트 캐치
Machine_웅
2020. 7. 14. 14:22
728x90
반응형
ContentObserver 를 사용 한다
package com.example.test111;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat;
import android.Manifest;
import android.app.Activity;
import android.app.ActivityManager;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.database.ContentObserver;
import android.database.Cursor;
import android.media.projection.MediaProjection;
import android.media.projection.MediaProjectionManager;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.provider.MediaStore;
import android.util.Log;
import android.widget.Toast;
import java.util.List;
public class MainActivity extends AppCompatActivity {
MediaProjectionManager mediaProjectionManager;
MediaProjection mediaProjection;
Activity myActivity;
String[] permission_list = {
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE,
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
checkPermission();
myActivity = this;
myActivity.getContentResolver().registerContentObserver(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, true, contentObserver);
}
private ContentObserver contentObserver = new ContentObserver(new Handler()) {
@Override
public boolean deliverSelfNotifications() {
return super.deliverSelfNotifications();
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
}
@Override
public void onChange(boolean selfChange, Uri uri) {
super.onChange(selfChange, uri);
Log.d("Woong", "요기1: " + uri);
String path = getFilePathFromContentResolver(myActivity, uri);
Log.d("Woong", "요기2: " + path);
if(isScreenshotPath(path)){
}else{
}
// if (isReadExternalStoragePermissionGranted()) {
// String path = getFilePathFromContentResolver(myActivity, uri);
// if (isScreenshotPath(path)) {
// Log.d("Woong","요기: "+path);
// }
// } else {
// }
}
};
private boolean isScreenshotPath(String path) {
return path != null && path.toLowerCase().contains("screenshots");
}
private String getFilePathFromContentResolver(Context context, Uri uri) {
try {
Cursor cursor = context.getContentResolver().query(uri, new String[]{
MediaStore.Images.Media.DISPLAY_NAME,
MediaStore.Images.Media.DATA
}, null, null, null);
if (cursor != null && cursor.moveToFirst()) {
String path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
cursor.close();
return path;
}
} catch (IllegalStateException ignored) {
}
return null;
}
private boolean isReadExternalStoragePermissionGranted() {
return ContextCompat.checkSelfPermission(myActivity, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED;
}
public void checkPermission() {
//현재 안드로이드 버전이 6.0미만이면 메서드를 종료한다.
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M)
return;
for (String permission : permission_list) {
//권한 허용 여부를 확인한다.
int chk = checkCallingOrSelfPermission(permission);
if (chk == PackageManager.PERMISSION_DENIED) {
//권한 허용을여부를 확인하는 창을 띄운다
requestPermissions(permission_list, 0);
}
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == 0) {
for (int i = 0; i < grantResults.length; i++) {
//허용됬다면
if (grantResults[i] == PackageManager.PERMISSION_GRANTED) {
} else {
Toast.makeText(getApplicationContext(), "앱권한설정하세요", Toast.LENGTH_LONG).show();
finish();
}
}
}
}
}
728x90
반응형