-1

我有一個應用程序(擴展),它在後臺運行一些服務來監視信標。檢查你是否在範圍內,然後執行一些操作。使用密碼保護應用程序

我的應用程序中只有一個活動,那就是設置活動。該服務在啓動後自動啓動,並無限期地運行。當某人嘗試打開該應用程序時,除非提供了正確的密碼,否則不應使用SettingsActivity。

所以在onPause()和onResume()我想啓動一個對話框,要求輸入密碼。當輸入一個正確的密碼(Retrofit檢查這個並返回一個布爾值)時,他被允許進入SettingsActivity。

問題:如何讓我的活動不可見onPause()以及如何在正確密碼(onResume()中的啓動對話框)後再次使其可見。

我可以想到一個解決方案,那就是將另一個視圖添加到我的settings_view.xml中,讓它填充父項並在正確的密碼和VISIBILITY.VISIBLE @ onPause()後設置VISIBILITY.GONE。 我想在onPause()中做到這一點,因爲那時人們在進入最近的應用程序屏幕時無法「看見」任何東西。但這似乎是一個非常草率的解決方案。

是否有反正我可以在onPause()中對佈局進行遮光/着色並在輸入正確的密碼後刪除遮擋/着色?

謝謝你的建議:)

回答

0

我解決了這個問題如下:

我包括一個佈局:

文件activity_settings.xml

<include layout="@layout/view_authentication" 
    android:id="@+id/authenticationView" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

文件view_authentication.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:id="@+id/authenticationView" 
      android:clipToPadding="false"> 

<LinearLayout 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_centerInParent="true" 
    android:padding="10dp"> 

    <EditText 
     android:id="@+id/authentication_password" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:padding="10dp" 
     android:hint="Password" 
     android:password="true"/> 

    <Button 
     android:id="@+id/authentication_button" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:padding="10dp" 
     android:text="@string/authentication_button"/> 

</LinearLayout> 
</RelativeLayout> 

在我的SettingsActivity.java中,我在onCreate()中添加了以下行。這可以防止被截取的屏幕截圖,看到什麼塊在最近用過

getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE); 

在的onResume(),它被打開的應用程序在第一次調用之前,或重新打開它。我把下面的方法:

public void showAuthenticationFrame() { 
    authenticationView.setVisibility(View.VISIBLE); 
    contentFrame.setVisibility(View.GONE); 
} 

當輸入了正確的密碼,我卻反其道而行之, 我設置authenticationView至消失,contentFrame爲可見。

0

問題:如何讓我的活動無形的onPause()和我怎麼讓它正確的密碼後,再次可見(啓動對話框中的onResume())。

您應該考慮其餘的活動生命週期。 如果您從互聯網上獲取一些信息,那麼在您的應用程序中可能需要很多問題。您可能有不良信號,無法使用網絡,甚至網絡連接適配器已關閉。

請考慮這個: 活動「登錄」onCreate:用所需的文件,然後提交按鈕創建一個平淡的活動。提交後,查詢網絡狀態以及您用於登錄的任何內容。然後保存一段時間的結果(可以說一天或30分鐘,無論什麼感覺最適合您的應用程序),通常SharedPreferences會做。

活動「設置活動」onResume:檢查保存的數據是否允許用戶查看活動。如果沒有,完成活動,並開始一個「登錄」之一。

+0

我通過在我的SettingsActivity(這是我唯一的活動)中包含一個佈局來實現它,然後在onResume中將其設置爲可見。當輸入正確的密碼(由服務器確認)時,它將被設置爲消失,實際佈局設置爲可見。 爲了避免截圖和看到最近的應用程序中的任何東西,我使用了「getWindow()。addFlags(WindowManager.LayoutParams.FLAG_SECURE);」 – Sverg

+0

@Sverg如果您已經解決了該問題,請將問題標記爲已回答。如果你所做的是顯着不同的,那麼你自己發佈一個答案,併發布代碼示例,以便新用戶可以檢查你做了什麼並瞭解它。通過點擊左上方的「v」​​符號來檢查任何答案,在上/下箭頭下方 – Bonatti