デバイス管理APIをつかうためにreceiverを定義する。
receiver : LockReceiver(DeviceAdminReceiverを継承したクラス)
permissionに "android.permission.BIND_DEVICE_ADMIN"
intent-filter : "android.app.action.DEVICE_ADMIN_ENABLED"
この指定をするとインストール時にユーザ確認をしてくれる。
receiverはXMLファイルで定義するのだが、ファイル名は
resourceで指定した "@xml/device_admin" となる。
-------------------------------------------------------------------------------------------
<receiver android:permission="android.permission.BIND_DEVICE_ADMIN"
android:name=".LockReceiver">
<meta-data android:name="android.app.device_admin" android:resource="@xml/device_admin" />
<intent-filter>
<action android:name="android.app.action.DEVICE_ADMIN_ENABLED"></action>
</intent-filter>
</intent-filter>
</receiver>
-------------------------------------------------------------------------------------------
device_admin.xml
アプリインストール時にforce-lockのユーザ確認が行われる。
-------------------------------------------------------------------------------------------
<?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>
-------------------------------------------------------------------------------------------
LockReceiver.java
DeviceAdminReceiverを継承したクラス。
実装は何もしない。
LockNowActivity.java
-------------------------------------------------------------------------------------------
public class LockNowActivity extends Activity {
// デバイスで強制されたポリシーを管理するためのクラス(の変数)
DevicePolicyManager m_devicePolicyManager;
// LockReceiverクラス生成用
ComponentName m_lockReceiver;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// ハンドラ取得
m_devicePolicyManager = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE);
// LockReceiverが有効かをチェック
m_lockReceiver = new ComponentName(this, LockReceiver.class);
boolean active = m_devicePolicyManager.isAdminActive(m_lockReceiver);
if (active) {
// 有効なので画面ロック
m_devicePolicyManager.lockNow();
} else {
// 有効化する
Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, m_lockReceiver);
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "Due to lock screen.");
startActivity(intent);
}
finish();
}
}
-------------------------------------------------------------------------------------------
0 件のコメント:
コメントを投稿