6

Androidフォンをプログラムでロックするにはどうすればよいですか? この例に従ってみました。しかし、有効化ボタンをクリックすると、アクティビティが数ミリ秒間ポップアップしてから自動的に閉じます

ログには、このログだけでエラーは表示されません

 Log.i("DeviceAdminSample", "Admin enable FAILED!");

Android画面をロックする方法を誰か教えてもらえますか(パターンロックを何度も試みて電話がロックダウンしたときのロックのように)

どんな助けでも大歓迎です

4

2 に答える 2

24

アプリを管理者として作成する必要があります. ここで何かを読んでください.

新しい空のプロジェクトを作成し、このようMyAdminReceiverに拡張するという名前のクラスを作成しますDeviceAdminReceiver

import android.app.admin.DeviceAdminReceiver;

public class MyAdminReceiver extends DeviceAdminReceiver{

}

xml という名前の新しいフォルダーを作成し、管理者権限用の .xml ファイルを作成しadmin.xml、ポリシーを追加します (画面をロックする場合)。

<device-admin xmlns:android="http://schemas.android.com/apk/res/android" >
    <uses-policies>
        <force-lock />
    </uses-policies>
</device-admin>

マニフェストで、Application タグの下にレシーバーを追加します

<receiver
    android:name="MyAdminReceiver"
    android:permission="android.permission.BIND_DEVICE_ADMIN">
    <meta-data
        android:name="android.app.device_admin"
        android:resource="@xml/admin"/>

    <intent-filter>
        <action android:name="android.app.action.DEVICE_ADMIN_ENABLED"/>
    </intent-filter>
</receiver>

そして、MainActivity.javaこのような追加コードで

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;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener {

    private static final int ADMIN_INTENT = 15;
    private static final String description = "Some Description About Your Admin";
    private DevicePolicyManager mDevicePolicyManager; 
    private ComponentName mComponentName;  

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mDevicePolicyManager = (DevicePolicyManager)getSystemService(  
                  Context.DEVICE_POLICY_SERVICE);  
        mComponentName = new ComponentName(this, MyAdminReceiver.class);  
        Button btnEnableAdmin = (Button) findViewById(R.id.btnEnableAdmin);
        Button btnDisableAdmin = (Button) findViewById(R.id.btnDisableAdmin);
        Button btnLock = (Button) findViewById(R.id.btnLock);
        btnEnableAdmin.setOnClickListener(this);
        btnDisableAdmin.setOnClickListener(this);
        btnLock.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.btnEnableAdmin:
            Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
            intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mComponentName);
            intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,description);
            startActivityForResult(intent, ADMIN_INTENT);
        break;

        case R.id.btnDisableAdmin:
            mDevicePolicyManager.removeActiveAdmin(mComponentName);  
            Toast.makeText(getApplicationContext(), "Admin registration removed", Toast.LENGTH_SHORT).show();
        break;

        case R.id.btnLock:
             boolean isAdmin = mDevicePolicyManager.isAdminActive(mComponentName);  
             if (isAdmin) {  
                 mDevicePolicyManager.lockNow();  
             }else{
                 Toast.makeText(getApplicationContext(), "Not Registered as admin", Toast.LENGTH_SHORT).show();
             }
        break;
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == ADMIN_INTENT) {
            if (resultCode == RESULT_OK) {
                Toast.makeText(getApplicationContext(), "Registered As Admin", Toast.LENGTH_SHORT).show();
            }else{
                Toast.makeText(getApplicationContext(), "Failed to register as Admin", Toast.LENGTH_SHORT).show();
            }
        }
    }

}

注: Activity サブクラスから Intent for Admin Device を呼び出そうとすると、エラーが発生する可能性がありますIntent.FLAG_ACTIVITY_NEW_TASKが、それを使用すると、ウィンドウがケースのようにポップしない可能性があるため、サブクラスから開いてみてくださいアクティビティのみ

また、管理者として登録解除されていない限り、アプリをアンインストールすることはできません

于 2013-11-05T05:39:29.800 に答える
0

しかし、有効化ボタンをクリックすると、アクティビティが数ミリ秒間ポップアップしてから自動的に閉じます

そのサンプルに示されているコードをクリックすると、設定アプリケーションが表示されます。

Androidの画面をロックする方法を誰か教えてください

リンク先のコードを使用します。これは、同じ基本的なことを示す私のサンプルアプリです。

具体的には:

  • BroadcastReceiverデバイス管理コンポーネントになるように設定されたマニフェストにが必要です

  • ユーザーはデバイス管理者としてアプリをアクティベートする必要があります

  • 次に、あなたは電話lockNow()をかけますDevicePolicyManager

デバイス管理 API に関する開発者向けドキュメントは次のとおりです。

于 2013-11-02T19:29:36.587 に答える