Androidプログラミングでワンタッチロックを実現する方法


本論文の例は、Androidプログラミングによるワンタッチロックスクリーンの実現方法を説明する。皆さんに参考にしてあげます。具体的には以下の通りです。
ここでは次の二つの種類を使います。
DeviceAdminReceiver設備管理コンポーネント。このクラスは、システムから発せられる意図を説明するための動作を提供する。あなたの設備管理アプリケーションにはDeviceAdminReceiverのサブクラスが含まれていなければなりません。このプログラムでは、携帯電話のデバイスマネージャを表します。
DevicePolicyManagerという管理設備に規定されているクラスです。ほとんどのクライアントは、ユーザが現在有効にされているDeviceAdminReceiverを宣言しなければならない。このDevicePolicyManagerは一つ以上のDeviceAdminReceiverの実例としてこれらの仕様を管理しています。
DevicePolicyManagerの例では、lockNowという方法がありますが、その前に、プログラム内の機器マネージャをアクティブにする必要があります。
以下はメインクラスLockActivityです。

package com.iceman.test; 
import android.app.Activity; 
import android.app.admin.DevicePolicyManager; 
import android.content.ComponentName; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
public class LockActivity extends Activity { 
  private DevicePolicyManager policyManager; 
  private ComponentName componentName; 
  @Override 
  public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main);  
  } 
  public void LockScreen(View v){
    policyManager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE); 
    componentName = new ComponentName(this, LockReceiver.class); 
    if (policyManager.isAdminActive(componentName)) {//       (        ) 
      policyManager.lockNow();//      
      android.os.Process.killProcess(android.os.Process.myPid()); 
    }else{ 
      activeManager();//            
    }   
  }
  //     
  public void Bind(View v){
   if(componentName!=null){
    policyManager.removeActiveAdmin(componentName);
    activeManager();
   }
  }
  @Override 
  protected void onResume() {//                         
    if (policyManager!=null && policyManager.isAdminActive(componentName)) { 
      policyManager.lockNow(); 
      android.os.Process.killProcess(android.os.Process.myPid()); 
    } 
    super.onResume(); 
  } 
  private void activeManager() { 
    //                        
    Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); 
    intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, componentName); 
    intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "    "); 
    startActivity(intent); 
  } 
} 

以下はデバイスマネージャクラスのLockReceiverです。これはDeviceAdminReceiverから引き継がれるクラスです。アクティブ/タッチアクティブの放送を受信して、次の操作を行います。本プログラムでは情報を簡単に印刷するだけです。

import android.app.admin.DeviceAdminReceiver; 
import android.content.Context; 
import android.content.Intent; 
public class LockReceiver extends DeviceAdminReceiver{ 
  @Override 
  public void onReceive(Context context, Intent intent) { 
    super.onReceive(context, intent); 
    System.out.println("onreceiver"); 
  } 
  @Override 
  public void onEnabled(Context context, Intent intent) { 
    System.out.println("    "); 
    super.onEnabled(context, intent); 
  } 
  @Override 
  public void onDisabled(Context context, Intent intent) { 
    System.out.println("    "); 
    super.onDisabled(context, intent); 
  } 
} 

メインプロファイル:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
  package="com.iceman.test" 
  android:versionCode="1" 
  android:versionName="1.0" > 
  <uses-sdk android:minSdkVersion="9" /> 
  <application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" > 
    <activity 
      android:name=".LockActivity" 
      android:label="@string/app_name" 
      android:theme="@android:style/Theme.Translucent" > 
      <intent-filter> 
        <action android:name="android.intent.action.MAIN" /> 
        <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
    </activity> 
    <receiver 
      android:name=".LockReceiver" 
      android:description="@string/app_name" 
      android:label="@string/app_name" 
      android:permission="android.permission.BIND_DEVICE_ADMIN" > 
      <meta-data 
        android:name="android.app.device_admin" 
        android:resource="@xml/lock_screen" /> 
      <intent-filter> 
        <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" /> 
      </intent-filter> 
    </receiver> 
  </application> 
</manifest> 

その中のロックscreenはデバイスマネージャの権限声明であり、res/xmlディレクトリの下でxmlファイルで定義する必要があります。

<?xml version="1.0" encoding="UTF-8"?> 
<device-admin xmlns:android="http://schemas.android.com/apk/res/android" > 
  <uses-policies> 
    <!--      --> 
    <force-lock /> 
  </uses-policies> 
</device-admin> 

OK.今は自分でもワンタッチのロックができます。ネットでいろいろな広告テープを探して押して送る必要はありません。
ここで述べたように、皆さんのAndroidプログラムの設計に役に立ちます。