當我的應用程序處於前臺時,是否可以攔截截屏事件(或爲其創建偵聽程序)?我想通過vol down + power key拍攝屏幕截圖時執行一些自己的代碼。當我的應用程序處於前臺時,是否可以截取屏幕截圖事件
2
A
回答
2
不,抱歉,您無法控制屏幕截圖。如果你的目的是防止您的應用已採取(例如安全原因)的截圖,使用FLAG_SECURE
:
public class FlagSecureTestActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setFlags(LayoutParams.FLAG_SECURE,
LayoutParams.FLAG_SECURE);
setContentView(R.layout.main);
}
}
1
做這個任務的方法是在截圖目錄中添加一個文件觀察者。在下面編寫示例代碼以觀察文件路徑 截圖文件觀察者 package com.example.main;
import android.os.Environment;
import android.os.FileObserver;
import android.util.Log;
public class ScreenshotObserver extends FileObserver {
private static final String PATH = Environment.getExternalStorageDirectory().toString() + "/Pictures/Screenshots";
private static final String TAG = "ScreenshotObserver";
private ScreenshotListener listener;
private String mLastTakenPath;
ScreenshotObserver(ScreenshotListener listener) {
super(PATH);
this.listener = listener;
Log.d(TAG, PATH);
}
@Override
public void onEvent(int event, String path) {
Log.d(TAG, String.format("Detected new file added %s", path));
if (path==null || event != FileObserver.CLOSE_WRITE)
Log.d(TAG, "Don't care.");
else if (mLastTakenPath!=null && path.equalsIgnoreCase(mLastTakenPath))
Log.d(TAG, "This event has been observed before.");
else {
mLastTakenPath = path;
listener.onScreenshotTaken(path);
Log.d(TAG, "Send event to listener.");
}
}
public void start() {
super.startWatching();
Log.d(TAG, "Start Watching.");
}
public void stop() {
super.stopWatching();
Log.d(TAG, "Stop Watching.");
}
}
活動實現文件觀察者
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class MainActivity extends Activity implements ScreenshotListener{
private ScreenshotObserver obs;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
obs = new ScreenshotObserver(this);
obs.start();
setContentView(R.layout.activity_main);
}
@Override
public void onScreenshotTaken(String path) {
TextView t = (TextView)findViewById(R.id.monText);
t.setText("Screenshot taken ! " + path);
}
}
+0
截圖目錄不是Android公共API的一部分,這意味着它可以在每個設備上有所不同。如果你選擇這樣的解決方案,你唯一可行的選擇是創建一個從設備到截圖目錄的地圖。總而言之,我不會推薦走這條路。 –
+0
你能否請一個描述示例。 –
相關問題
- 1. 以當前屏幕截圖
- 2. 當應用程序處於審覈階段時,是否可以更改應用程序屏幕截圖?
- 3. 以當前屏幕的屏幕截圖
- 4. 截取當前顯示屏幕的屏幕截圖,而不是當前活動
- 5. 從我的應用程序截取設備的屏幕截圖
- 6. iphone - 截取其他應用程序的屏幕截圖?
- 7. 截取應用程序中的屏幕截圖
- 8. 如何在Windows應用程序中截取屏幕截圖?
- 9. 屏幕截圖應用程序,可以在任何視圖中截圖
- 10. AIR應用程序的屏幕截圖
- 11. C++截取屏幕截圖
- 12. 截取屏幕截圖
- 13. 是否可以使用Selenium/Capybara截取整個頁面的屏幕截圖?
- 14. 使用cuda獲取可見應用程序的屏幕截圖
- 15. 如何使用服務截取我的應用程序的屏幕截圖?
- 16. iOS - 在應用程序崩潰之前採取屏幕截圖
- 17. QQ屏幕截圖應用程序
- 18. 應用程序屏幕截圖問題
- 19. 如何讓屏幕截圖製作控制檯程序阻止屏幕截圖?
- 20. 使用screencap實用程序獲取屏幕截圖時的屏幕截圖使用screencap實用程序獲取屏幕截圖
- 21. SpriteKit屏幕截圖的屏幕截圖
- 22. 更新我的應用程序時可以更改屏幕截圖嗎?
- 23. 是否可以從Firefox的Android擴展中截取屏幕截圖?
- 24. 當應用程序關閉時拍攝設備屏幕截圖
- 25. 截取設備的當前屏幕
- 26. 編寫一個Android應用程序以獲取屏幕截圖
- 27. 當前android的屏幕截圖活動
- 28. 應用程序在後臺運行時可以截屏嗎?
- 29. 跨平臺屏幕截圖
- 30. ffmpeg用於屏幕截圖?
衝,我希望能得到所採取的截圖和我的應用程序中使用它.. – Luciano
@Luizje:我不相信保存屏幕截圖的位置是有保證的。這不是Android SDK的一部分。 – CommonsWare
Thnx,我想我可以通過添加FileObserver來偵聽CREATE事件,並且在觸發事件時檢索屏幕截圖。# – Luciano