2014-05-21 29 views

回答

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); 
    } 
} 
+0

衝,我希望能得到所採取的截圖和我的應用程序中使用它.. – Luciano

+0

@Luizje:我不相信保存屏幕截圖的位置是有保證的。這不是Android SDK的一部分。 – CommonsWare

+0

Thnx,我想我可以通過添加FileObserver來偵聽CREATE事件,並且在觸發事件時檢索屏幕截圖。# – Luciano

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

你能否請一個描述示例。 –

相關問題