2013-07-29 42 views
7

Trong ứng dụng của tôi, tôi cần khóa và mở khóa điện thoại. Tôi đã tìm kiếm nó, tôi đã tìm thấy nhiều câu trả lời, tôi đã thử chúng nhưng không có ai làm việc.Cách khóa/mở khóa điện thoại theo chương trình: Android

Tôi cần mở khóa điện thoại theo số onCreate() và khóa lại điện thoại trong khi tôi hoàn thành hoạt động của mình.

Các bạn có biết cách làm giống nhau không?

Cảm ơn bạn bè.

EDIT:

Một số liên kết, mà tôi đã cố gắng là:

How to display Activity when the screen is locked?

Android screen lock/ unlock programmatically

https://groups.google.com/forum/#!topic/android-developers/BOLjJTMO4zE

Trong ứng dụng của tôi, tôi đang lên kế hoạch một nhiệm vụ sử dụng AlarmManager và n bật khóa điện thoại. Hoạt động của tôi bắt đầu vào thời gian đã lên lịch nhưng nó không mở khóa điện thoại của tôi. khi tôi đang mở khóa điện thoại của tôi bằng tay chạy hoạt động là nhận xuất hiện

+1

mà câu trả lời bạn đã thử vì vậy chúng tôi biết không để đề nghị họ? – CodingIntrigue

+1

"không có ai đang làm việc" không phải là một mô tả hữu ích về các triệu chứng của bạn. Hãy giải thích * hoàn toàn và chính xác * những gì bạn đã thử và những vấn đề bạn gặp phải. – CommonsWare

+0

@BladeOrz: Tôi đã thêm một số trang đã truy cập liên kết –

Trả lời

8

trên BroadcastReceiver lập wakelock và trong activity

làm điều này:

Window window = this.getWindow(); 
window.addFlags(LayoutParams.FLAG_DISMISS_KEYGUARD); 
window.addFlags(LayoutParams.FLAG_SHOW_WHEN_LOCKED); 
window.addFlags(LayoutParams.FLAG_TURN_SCREEN_ON); 

nhập sau

import android.view.Window; 
import android.view.WindowManager.LayoutParams; 

nó giải quyết vấn đề của tôi, đánh giá nó lên :-)))

+0

Điều này bằng cách nào đó dường như làm việc, và ứng dụng của tôi được đưa đến phía trước .... sự kiện mặc dù không có pin thẻ sim đã được nhập. Tôi chỉ bằng cách nào đó nghĩ rằng bạn sẽ không thể truy cập bất kỳ khả năng điện thoại hoặc dữ liệu nào. Tôi sẽ cho bạn biết nếu đây là trường hợp ... – 130nk3r5

+0

Jip, xác nhận. Vì vậy, bạn sẽ không có quyền truy cập vào chức năng thẻ sim. Vì vậy, nếu bạn muốn bỏ qua việc nhập mã pin và kích hoạt ứng dụng của mình, công cụ này sẽ hoạt động tuyệt vời ... miễn là người dùng không thu nhỏ hoặc đóng ứng dụng, vì vậy bạn quay lại màn hình đăng nhập. – 130nk3r5

+0

Sooo đơn giản! và hoạt động tốt –

-1

Hãy thử này ...

@Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); 
        setContentView(R.layout.activity_main); 
    } 

    @Override 
     protected void onPause() { 
      super.onPause(); 
      getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); 


     } 
3
DevicePolicyManager deviceManger; 
ActivityManager activityManager; 
ComponentName compName; 

thêm mã trong onCreate()

deviceManger = (DevicePolicyManager)getSystemService(
      Context.DEVICE_POLICY_SERVICE); 
activityManager = (ActivityManager)getSystemService(
      Context.ACTIVITY_SERVICE); 
compName = new ComponentName(this, DeviceAdminLock.class); 

thêm mã trong file manifest

<receiver android:name=".DeviceAdminLock" 
     android:permission="android.permission.BIND_DEVICE_ADMIN"> 
     <meta-data android:name="android.app.device_admin" 
      android:resource="@xml/device_admin_sample" /> 
     <intent-filter> 
      <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" /> 
     </intent-filter> 
</receiver> 

Tạo tệp tài nguyên xml trong res/xml dưới dạng device_admin_sample.xml và thêm thông tin sau -

<device-admin xmlns:android="http://schemas.android.com/apk/res/android"> 
  <uses-policies> 
    <limit-password /> 
    <watch-login /> 
    <reset-password /> 
    <force-lock /> 
    <wipe-data /> 
    <expire-password /> 
    <encrypted-storage /> 
    <disable-camera /> 
  </uses-policies> 

Add quyền trong file manifest -

<uses-permission android:name="android.permission.DISABLE_KEYGUARD"/> 
<uses-permission android:name="android.permission.WAKE_LOCK"/> 

Tạo một lớp thu kéo dài lớp DeviceAdminReceiver.

public class DeviceAdminLock extends DeviceAdminReceiver { 

@Override 
public void onEnabled(Context context, Intent intent) { 
} 

@Override 
public CharSequence onDisableRequested(Context context, Intent intent) { 
    return "This is an optional message to warn the user about disabling."; 
} 

@Override 
public void onDisabled(Context context, Intent intent) { 
} 

@Override 
public void onPasswordChanged(Context context, Intent intent) { 
} 

@Override 
public void onPasswordFailed(Context context, Intent intent) { 
} 

@Override 
public void onPasswordSucceeded(Context context, Intent intent) { 
} 

}

hỏi kích hoạt cho phép khóa trong lớp hoạt động

Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); 
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN,compName); 
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,"Additional text explaining why this needs to be added."); 
startActivityForResult(intent, 1); 

phép kiểm tra được đưa ra hoặc không

boolean active = deviceManger.isAdminActive(compName); 
if (active) { 
// if available then lock 
    deviceManger.lockNow(); 
} 

thiết bị unlock

deviceManger.removeActiveAdmin(compName); 

Để Unlock

KeyguardManager km = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE); 
final KeyguardManager.KeyguardLock kl = km .newKeyguardLock("MyKeyguardLock"); 
kl.disableKeyguard(); 

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 
WakeLock wakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK 
           | PowerManager.ACQUIRE_CAUSES_WAKEUP 
           | PowerManager.ON_AFTER_RELEASE, "MyWakeLock"); 
wakeLock.acquire(); 
0

Tính đến API 27, FLAG_SHOW_WHEN_LOCKEDFLAG_TURN_SCREEN_ON bị phản đối. Thay vì sử dụng này trong Manifest

<activity 
    android:name=".MyActivity" 
    android:turnScreenOn="true" 
    android:showWhenLocked="true"/> 

Hoặc, cho sử dụng chung, trong hoạt động của bạn:

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

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) { 
     setTurnScreenOn(true); 
     setShowWhenLocked(true); 
    } else { 
     window.addFlags(LayoutParams.FLAG_SHOW_WHEN_LOCKED); 
     window.addFlags(LayoutParams.FLAG_TURN_SCREEN_ON); 
    } 
} 
Các vấn đề liên quan