1. 程式人生 > >Android提高應用的安全性, 禁止螢幕截圖

Android提高應用的安全性, 禁止螢幕截圖

在玩交通銀行的客戶端的時候, 發現一個很人性化的功能: 禁止螢幕截圖. 於是決定看看這個功能是怎麼實現的.

Google了一番, 發現實現的方式就是在setContentView()方法前加上:
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.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); } }

我們來看看Android開發者網站是怎麼解釋的:
FLAG_SECURE的解釋

意思就是設定了這個flag後, 系統會把當前視窗的內容視為安全隱私內容, 系統會阻止這些內容被截圖或者在不安全可靠的場景顯示出來.

在Google的過程中, 發現這個flag可以實現以下功能:

  • 阻止螢幕截圖
  • 在Recent apps(任務切換介面)中只顯示應用名字和圖示, 不顯示內容
  • Google App的Now on tap功能不會去分析你的頁面的內容

現在來看一下這三個場景的效果圖吧!

交通銀行的”截圖防護功能”示意圖:
交通銀行

在交通銀行app中截圖, 會提示截圖失敗:
在交通銀行app中截圖失敗的提示

在有交通銀行app的Recent apps介面, 不顯示交通銀行app的頁面內容:
Recent apps介面

在交通銀行app上使用Google Now on Tap功能:
在交通銀行app上使用Google Now on Tap功能

個人覺得這個功能對於像Snapchat這類閱後即焚的應用來說是非常有用的, 增加了別有用心的使用者的”反閱後即焚”行為的難度.

最後, 使用這個功能要注意相容性問題, 國產手機廠商的定製rom對Android做出的修改可是喪心病狂的. 開發時需要對不同版本的Android系統進行除錯, 也需要在不同的定製rom上除錯, 如果功能不能正常使用, 還是要禁用這個功能!