2011-11-09 24 views
5

Tôi đang sử dụng API Administration Android và có một DeviceAdminReceiver, và ghi đè lên các chức năng sau:Có rắc rối nhận ACTION_PASSWORD_SUCCEEDED và intents ACTION_PASSWORD_FAILED

@Override 
public void onEnabled(Context context, Intent intent) 
{ 
    System.out.println("Admin On======================");  
} 

@Override 
public void onDisabled(Context context, Intent intent) 
{ 
    System.out.println("Admin Off======================"); 
} 

@Override 
public void onPasswordFailed(Context context, Intent intent) 
{ 
    System.out.println("PW Bad============================"); 
} 

@Override 
public void onPasswordSucceeded(Context context, Intent intent) 
{ 
    System.out.println("PW Good===========================");  
} 

@Override 
public void onPasswordChanged(Context context, Intent intent) 
{ 
    System.out.println("Changed PW=======================");   
} 

On kích hoạt, người khuyết tật, và PW thay đổi công việc, tuy nhiên mật khẩu thất bại và thành công làm không phải. Kỳ lạ thay, họ ngẫu nhiên làm việc một lần trong một thời gian và sau đó ngừng làm việc. Có gì sai với mã của tôi không, hoặc đây có phải là vấn đề về API không?

Người nhận trong AndroidMaifest

<receiver android:name="AdminReciever" 
      android:label="Administration" 
      android:permission="android.permission.BIND_DEVICE_ADMIN" android:enabled="true"> 
      <meta-data android:name="android.app.device_admin" 
       android:resource="@xml/adminpolicies" /> 
      <intent-filter> 
       <action android:name="android.app.action.ACTION_PASSWORD_SUCCEEDED"/> 
       <action android:name="android.app.action.ACTION_PASSWORD_FAILED"></action> 
       <action android:name="android.app.action.DEVICE_ADMIN_ENABLED"></action> 
       <action android:name="android.app.action.ACTION_PASSWORD_CHANGED"></action> 

      </intent-filter> 
</receiver> 

FIXED

Tìm thấy ra vấn đề, có vẻ như đây không được ghi chép lại. Tôi đã đặt độ dài mật khẩu tối thiểu bằng dpm.setPasswordMinimumLength(). Hoạt động nhập mật khẩu không kích hoạt ý định PASSWORD_FAILED nếu mật khẩu được nhập ít hơn độ dài tối thiểu. Ngoài ra PASSWORD_SUCCEEDED chỉ kích hoạt nếu một mật khẩu xấu (PASSWORD_FAILED được kích hoạt) được nhập trước khi thành công. Vì vậy, hai mật khẩu thành công liên tiếp sẽ không kích hoạt ý định thứ hai.

+0

cách bạn giải quyết vấn đề này? tôi thiết lập độ dài min là 0, và tôi vẫn không nhận được 'cast' thất bại. Tôi đang nghĩ một số thành phần khác có độ dài tối thiểu, trong trường hợp này, tôi không thể làm gì cả. bất kỳ ý tưởng? –

+0

Yes loncannon vui lòng hướng dẫn chúng tôi, cách bạn giải quyết vấn đề này? Cách giữ mật khẩu mỗi lần nhập sai hoặc tốt. Stuck badly:/ – Salmaan

+0

Điều này đã được một thời gian trước vì vậy tôi không thể nhớ ra khỏi đỉnh đầu của tôi nếu tôi "cố định" nó. Vấn đề trên là cho một dự án nghiên cứu đã được hoàn thành từ lâu. Tôi đoán FIXED không phải là tiêu đề tốt nhất để sử dụng, thay vào đó tôi đã tìm ra lý do tại sao một số hành vi kỳ lạ đã xuất hiện. – Ioncannon

Trả lời

0

Bạn có thể sử dụng android.intent.action.USER_PRESENT. Mục đích này sẽ được kích hoạt bất cứ khi nào người dùng mở khóa thiết bị. Bạn có thể đăng ký bộ thu phát sóng sẽ ghi lại android.intent.action.USER_PRESENT để phát hiện các sự kiện mở khóa thiết bị.

0

Câu trả lời rất muộn ở đây nhưng tôi đã gặp vấn đề tương tự và bản chỉnh sửa 'Cố định' của bạn đã giúp tôi giải thích lý do.

Như bạn nói, đây không phải là tài liệu rất tốt ở tất cả vì vậy có thể khá gây hiểu nhầm. documentation cho thấy rằng bất kỳ lỗi mật khẩu nào sẽ dẫn đến onPasswordFailed được gọi.

ACTION_PASSWORD_FAILED

hành động gửi đến người quản trị thiết bị khi người dùng đã nhập một thiết bị hoặc cấu hình thử thách mật khẩu không chính xác. Bạn có thể vào thời điểm này kiểm tra số lần thử mật khẩu thất bại đã có với DevicePolicyManager.getCurrentFailedPasswordAttempts(). Bạn thường sẽ xử lý điều này trong onPasswordFailed (Context, Intent, UserHandle).

Tuy nhiên, điều đó không đúng. onPasswordFailed chỉ xuất hiện để được gọi khi mật khẩu/PIN/Mẫu đáp ứng Chính sách mặc định. Điều này khác với độ dài mật khẩu tối thiểu của bạn.

Mặc dù tôi không thể tìm thấy bất kỳ tài liệu nào nêu rõ các chính sách mặc định, nó có vẻ là 4 số (PIN), 4 ký tự (Mật khẩu) hoặc 4 điểm (Mẫu). Bất cứ điều gì ít hơn những điều này sẽ không kích hoạt cuộc gọi.

Ví dụ, đặt độ dài tối thiểu thành 6 và đặt mật khẩu của bạn thành 123ABC. Bây giờ cố gắng đăng nhập bằng cách sử dụng sau đây: -

  • 123 - onPasswordFailed không được gọi
  • 123A - onPasswordFailed được gọi

đẹp dự án ít thử here bạn có thể thử điều này với.

Mặc dù bạn có thể đã thực sự chuyển từ vấn đề này, nhưng người khác có thể hiểu rõ hơn.

Chúc mừng.

Các vấn đề liên quan