Слушайте действие скриншота в android

Я новичок в разработке Android.

Я делаю приложение, которое будет реагировать при снятии снимка экрана телефона Android. Я слышал, что андроид позволяет такие действия могут быть обнаружены Broadcast Receivers , поэтому я просмотрел документацию разработчика Android.

Я думаю, что разработчики фреймворков забыли или не реализовали широковещательный код скриншота, потому что они не указали это действие в своей документации.

Есть ли другой способ прослушивания скриншотов?

Solutions Collecting From Web of "Слушайте действие скриншота в android"

Вы можете обнаружить событие, ContentObserver ScreenShot, используя ContentObserver . Я использую его в одном из моих проектов.

ScreenShotContentObserver.java

 public abstract class ScreenShotContentObserver extends ContentObserver { private Context context; private boolean isFromEdit = false; private String previousPath; public ScreenShotContentObserver(Handler handler, Context context) { super(handler); this.context = context; } @Override public boolean deliverSelfNotifications() { return super.deliverSelfNotifications(); } @Override public void onChange(boolean selfChange) { super.onChange(selfChange); } @Override public void onChange(boolean selfChange, Uri uri) { Cursor cursor = null; try { cursor = context.getContentResolver().query(uri, new String[]{ MediaStore.Images.Media.DISPLAY_NAME, MediaStore.Images.Media.DATA }, null, null, null); if (cursor != null && cursor.moveToLast()) { int displayNameColumnIndex = cursor.getColumnIndex(MediaStore.Images.Media.DISPLAY_NAME); int dataColumnIndex = cursor.getColumnIndex(MediaStore.Images.Media.DATA); String fileName = cursor.getString(displayNameColumnIndex); String path = cursor.getString(dataColumnIndex); if (new File(path).lastModified() >= System.currentTimeMillis() - 10000) { if (isScreenshot(path) && !isFromEdit && !(previousPath != null && previousPath.equals(path))) { onScreenShot(path, fileName); } previousPath = path; isFromEdit = false; } else { cursor.close(); return; } } } catch (Throwable t) { isFromEdit = true; } finally { if (cursor != null) { cursor.close(); } } super.onChange(selfChange, uri); } private boolean isScreenshot(String path) { return path != null && path.toLowerCase().contains("screenshot"); } protected abstract void onScreenShot(String path, String fileName); } 

И используйте этот класс в своей деятельности: –

 public class MainActivity extends AppCompatActivity { private ScreenShotContentObserver screenShotContentObserver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); screenShotContentObserver = new ScreenShotContentObserver(handler, this) { @Override protected void onScreenShot(String path, String fileName) { File file = new File(path); //this is the file of screenshot image } }; } @Override public void onResume() { super.onResume(); getContentResolver().registerContentObserver( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, true, screenShotContentObserver ); } @Override public void onPause() { super.onPause(); try { getContentResolver().unregisterContentObserver(screenShotContentObserver); } catch (Exception e) { e.printStackTrace(); } } @Override public void onDestroy() { super.onDestroy(); try { getContentResolver().unregisterContentObserver(screenShotContentObserver); } catch (Exception e) { e.printStackTrace(); } } } 

Не забудьте остановить Observer в onPause или onDestroy методах Activity