一、背景介紹
對于涉及用戶個(gè)人隱私的應(yīng)用,比如銀行、支付、社交等應(yīng)用,其界面中可能會涉及到用戶的個(gè)人信息,比如手機(jī)號、身份證號碼、交易記錄等。如果這些信息被人截屏,就可能會造成用戶個(gè)人隱私的泄露。
另外一方面,一些企業(yè)和開發(fā)者可能會開發(fā)一些自己的知識產(chǎn)權(quán)應(yīng)用,比如游戲、新聞客戶端、電商應(yīng)用等,這些應(yīng)用中可能會包含大量獨(dú)有的內(nèi)容和資料,如果被人截屏,就可能會遭受知識產(chǎn)權(quán)侵犯。
二、Android系統(tǒng)中禁止截屏的實(shí)現(xiàn)方式
1. 使用FLAG_SECURE屬性
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//禁止當(dāng)前頁面截屏
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);
setContentView(R.layout.activity_main2);
}
2. 使用SurfaceView
在Android系統(tǒng)中,SurfaceView是一種可以在應(yīng)用中顯示圖像和視頻的組件。而且,SurfaceView還擁有一個(gè)特性,即可以禁止截屏。具體操作是在創(chuàng)建SurfaceView時(shí),使用setSecure()方法來設(shè)置:
SurfaceView.setSecure(true);
三、實(shí)現(xiàn)示例
以下示例為在Activity中使用FLAG_SECURE屬性實(shí)現(xiàn)禁止截屏:
public class SampleActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);
setContentView(R.layout.activity_main);
}
}
以下示例為在SurfaceView中使用setSecure()方法實(shí)現(xiàn)禁止截屏:
public class SampleSurfaceView extends SurfaceView implements SurfaceHolder.Callback {
public SampleSurfaceView(Context context, AttributeSet attrs) {
super(context, attrs);
getHolder().addCallback(this);
setZOrderOnTop(true);
setSecure(true); // 禁止截屏
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// todo something
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
// todo something
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// todo something
}
}
四 注意事項(xiàng)
(1)禁止截屏并不等于防抄襲,用戶仍然可以通過從另一個(gè)手機(jī)或者相機(jī)拍照等方式來獲取屏幕上的內(nèi)容;
(2)禁止截屏可能會對應(yīng)用性能產(chǎn)生一定的影響,使用時(shí)需斟酌權(quán)衡;文章來源:http://www.zghlxwxcb.cn/news/detail-472986.html
(3)禁止截屏只能阻止截屏,無法阻止用戶通過拍照、錄屏等其他方式獲取屏幕上的信息,因此需要在業(yè)務(wù)場景中進(jìn)行綜合考慮,綜合選用多種安全措施。
(4)在某些設(shè)備上使用WindowManager.LayoutParams.FLAG_SECURE時(shí)要小心(在Samsung Galaxy ACE上進(jìn)行了驗(yàn)證,例如GT-S5830),這將使視圖混亂。看起來像是三星特有的錯(cuò)誤。建議以下內(nèi)容:文章來源地址http://www.zghlxwxcb.cn/news/detail-472986.html
if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) {
getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);
}
到了這里,關(guān)于防止Android截屏的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!