2016-09-15 4 views
1

私はAndroidアプリケーションの1つにapplockライブラリを追加しようとしています。私はShowContentActivityアクティビティをロックして開こうとする前にそれを保護したい。私は良いライブラリhereを見つけました。Android用アプリケーションロックライブラリ

ShowContentActivity用の私のJavaコードは以下のようになりました。

public void showContent(View view) { 

     Intent intent = new Intent(LockActivity.this, ShowContentActivity.class); 
    startActivity(intent); 

    } 

} 

私はそれを実装するためにライブラリページの指示に従っています。しかし、私は混乱し、使用することができません。誰も私にどのようにロックを作成し、私の活動を開く前にそれを使用することができます示唆してください?

私の全クラスが

public class LockActivity extends AppCompatActivity { 
/** 
* Whether or not the system UI should be auto-hidden after 
* {@link #AUTO_HIDE_DELAY_MILLIS} milliseconds. 
*/ 
private static final boolean AUTO_HIDE = true; 

/** 
* If {@link #AUTO_HIDE} is set, the number of milliseconds to wait after 
* user interaction before hiding the system UI. 
*/ 
private static final int AUTO_HIDE_DELAY_MILLIS = 3000; 

/** 
* Some older devices needs a small delay between UI widget updates 
* and a change of the status and navigation bar. 
*/ 
private static final int UI_ANIMATION_DELAY = 300; 
private final Handler mHideHandler = new Handler(); 
private View mContentView; 
private final Runnable mHidePart2Runnable = new Runnable() { 
    @SuppressLint("InlinedApi") 
    @Override 
    public void run() { 
     // Delayed removal of status and navigation bar 

     // Note that some of these constants are new as of API 16 (Jelly Bean) 
     // and API 19 (KitKat). It is safe to use them, as they are inlined 
     // at compile-time and do nothing on earlier devices. 
     mContentView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE 
       | View.SYSTEM_UI_FLAG_FULLSCREEN 
       | View.SYSTEM_UI_FLAG_LAYOUT_STABLE 
       | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY 
       | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION 
       | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); 
    } 
}; 
private View mControlsView; 
private final Runnable mShowPart2Runnable = new Runnable() { 
    @Override 
    public void run() { 
     // Delayed display of UI elements 
     ActionBar actionBar = getSupportActionBar(); 
     if (actionBar != null) { 
      actionBar.show(); 
     } 
     mControlsView.setVisibility(View.VISIBLE); 
    } 
}; 
private boolean mVisible; 
private final Runnable mHideRunnable = new Runnable() { 
    @Override 
    public void run() { 
     hide(); 
    } 
}; 
/** 
* Touch listener to use for in-layout UI controls to delay hiding the 
* system UI. This is to prevent the jarring behavior of controls going away 
* while interacting with activity UI. 
*/ 
private final View.OnTouchListener mDelayHideTouchListener = new View.OnTouchListener() { 
    @Override 
    public boolean onTouch(View view, MotionEvent motionEvent) { 
     if (AUTO_HIDE) { 
      delayedHide(AUTO_HIDE_DELAY_MILLIS); 
     } 
     return false; 
    } 
}; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_lock); 

    mVisible = true; 
    mControlsView = findViewById(R.id.fullscreen_content_controls); 
    mContentView = findViewById(R.id.fullscreen_content); 


    // Set up the user interaction to manually show or hide the system UI. 
    mContentView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      toggle(); 
     } 
    }); 

    // Upon interacting with UI controls, delay any scheduled hide() 
    // operations to prevent the jarring behavior of controls going away 
    // while interacting with the UI. 
    findViewById(R.id.unlock).setOnTouchListener(mDelayHideTouchListener); 
} 

@Override 
protected void onPostCreate(Bundle savedInstanceState) { 
    super.onPostCreate(savedInstanceState); 

    // Trigger the initial hide() shortly after the activity has been 
    // created, to briefly hint to the user that UI controls 
    // are available. 
    delayedHide(100); 
} 

private void toggle() { 
    if (mVisible) { 
     hide(); 
    } else { 
     show(); 
    } 
} 

private void hide() { 
    // Hide UI first 
    ActionBar actionBar = getSupportActionBar(); 
    if (actionBar != null) { 
     actionBar.hide(); 
    } 
    mControlsView.setVisibility(View.GONE); 
    mVisible = false; 

    // Schedule a runnable to remove the status and navigation bar after a delay 
    mHideHandler.removeCallbacks(mShowPart2Runnable); 
    mHideHandler.postDelayed(mHidePart2Runnable, UI_ANIMATION_DELAY); 
} 

@SuppressLint("InlinedApi") 
private void show() { 
    // Show the system bar 
    mContentView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 
      | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION); 
    mVisible = true; 

    // Schedule a runnable to display UI elements after a delay 
    mHideHandler.removeCallbacks(mHidePart2Runnable); 
    mHideHandler.postDelayed(mShowPart2Runnable, UI_ANIMATION_DELAY); 
} 

/** 
* Schedules a call to hide() in [delay] milliseconds, canceling any 
* previously scheduled calls. 
*/ 
private void delayedHide(int delayMillis) { 
    mHideHandler.removeCallbacks(mHideRunnable); 
    mHideHandler.postDelayed(mHideRunnable, delayMillis); 
} 

public void showContent(View view) { 


      Intent intent = new Intent(LockActivity.this, ShowContentActivity.class); 
      startActivity(intent); 
     } 




} 
+0

は、 'onCreate'でメソッドを追加しています。コードを追加してください。 – W4R10CK

+0

@ W4R10CK私はonCreateに追加していません。** showContent **はボタンです。これでロックしたいです...ありがとう –

+0

このメソッドまたはコード全体のクラスのコードを追加できますか? – W4R10CK

答えて

0

を下回るようなものです

おかげで、私は今朝あなたissueを見て、これでそこに答えた(しかし、私はここでもう少し詳細に行くよ):

まず、アクティビティをロックしようとする前にパスコードを作成するようにユーザーに指示します。彼らはPINを作成していない場合は、それらをアンロックするためのものは何もありません:

new CreateLockDialogBuilder(Activity, 
    new LockCreationListener(){ 
     public void onLockCanceled(){ } // Dialog was closed without entry 
     public void onLockSuccessful(){ 
      // They've created a PIN, so now you can use the unlocking mechanisms 
      doSomethingOnAppLocked(); 
     } 
    }) 
    .show(); 

彼らはそれをロックした後、ちょうどあなたのshowContent(ビュー)メソッド内のチェック]ダイアログボックスで、あなたの意図をラップ:

ActionLockingHelper.unlockIfRequired(Activity, new UnlockEventListener(){ 
    public void onCanceled(){ } // Dialog was closed without entry 
    public void onUnlockFailed(String reason){ } // Not called with default Dialog, instead is handled internally 
    public void onUnlockSuccessful(){ 
     Intent intent = new Intent(LockActivity.this, ShowContentActivity.class); 
     startActivity(intent); 
    } 
}); 

上記はrepoのホームページのreadmeから直接取ったものです。詳細については、アプリケーションのアーキテクチャに合わせてLockableCompatActivityを拡張するなど、詳しく説明したいと思っています。

+0

!ありがとう、それは私の問題を解決しました....しかし時々アプリケーションロックの活動を示していないし、ロックを解除した後にのみ開く必要があります次の活動に直接行く。私はGitHubでLibrayにコードを掲載しています...そこに問題が残っているかどうかチェックしてください。この間にエラーは発生しません。 –

+0

デフォルトのロック解除時間は15分です。アクティビティが一時停止するたびに(画面が1秒間だけオフになっている場合でも)ロックする場合は、 'R.integer.pin__default_activity_lock_reenable_minutes'をオーバーライドして値を0に設定する必要があります – Guardanis