Android 4.0 Device Admin Receiver not working

此生再无相见时 提交于 2019-12-24 07:37:36

问题


I'm trying to build a really simple app to wipe all the user data off a ICS device.

I've tried to create the app using the source code on http://developer.android.com/guide/topics/admin/device-admin.html and http://marakana.com/s/post/1291/android_device_policy_administration_tutorial

But I'm having an issue, no matter what I do, the broadcast receiver for prompting the user to allow admin does not appear!

Heres what I got so far if anyone can help with this issue.

Manifest:

<uses-sdk android:minSdkVersion="15" />

<application android:icon="@drawable/ic_launcher"
    android:label="@string/app_name">
    <activity     android:name="com.CheckActivityService.CheckActivityServiceActivity"
        android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER"     />
        </intent-filter>
    </activity>
</application>


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


</manifest>

Activity:

public class CheckActivityServiceActivity extends Activity implements                          OnCheckedChangeListener{

 /** Called when the activity is first created. */

static final int ACTIVATION_REQUEST = 1; // identifies our request id
DevicePolicyManager devicePolicyManager;
ComponentName deviceAdmin;
ToggleButton toggleButton;
static final String TAG = "DevicePolicyActivity";

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    toggleButton = (ToggleButton) super
        .findViewById(R.id.toggle_device_admin);
    toggleButton.setOnCheckedChangeListener(this);

    Button btn = (Button) findViewById(R.id.wipeDataBtn);
    btn.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            wipeData();
        }
    });

    devicePolicyManager = (DevicePolicyManager)     getSystemService(Context.DEVICE_POLICY_SERVICE);
    deviceAdmin = new ComponentName(CheckActivityServiceActivity.this,      mDeviceAdminReceiver.class);
     }

/**
 * Called when the state of toggle button changes. In this case, we send an
 * intent to activate the device policy administration.
 */
public void onCheckedChanged(CompoundButton button, boolean isChecked) {
        if (isChecked) {
            // Launch the activity to have the user enable our admin.
            Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
            intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, deviceAdmin);
            intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "My Boss told me     to do this!!");
            startActivityForResult(intent, ACTIVATION_REQUEST);
        }
        Log.d(TAG, "onCheckedChanged to: " + isChecked);
}

public void wipeData(){
    devicePolicyManager.wipeData(ACTIVATION_REQUEST);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (requestCode) {
        case ACTIVATION_REQUEST:
                if (resultCode == Activity.RESULT_OK) {
                        Log.i(TAG, "Administration enabled!");
                        toggleButton.setChecked(true);
                } else {
                        Log.i(TAG, "Administration enable FAILED!");
                        toggleButton.setChecked(false);
                }
                return;
        }
        super.onActivityResult(requestCode, resultCode, data);
}
}

Reciever:

 public class mDeviceAdminReceiver extends DeviceAdminReceiver {

    static final String TAG = "DeviceAdminReceiver";

    void showToast(Context context, String msg) {
        String status = "TEST";
        Toast.makeText(context, status, Toast.LENGTH_SHORT).show();
    }

    /** Called when this application is approved to be a device administrator. */
    @Override
    public void onEnabled(Context context, Intent intent) {
            super.onEnabled(context, intent);
            Toast.makeText(context, "Admin Enabeled",
                            Toast.LENGTH_LONG).show();
            Log.d(TAG, "onEnabled");
    }

    /** Called when this application is no longer the device administrator. */
    @Override
    public void onDisabled(Context context, Intent intent) {
            super.onDisabled(context, intent);
            Toast.makeText(context, "Admin Disabled",
                            Toast.LENGTH_LONG).show();
            Log.d(TAG, "onDisabled");
    }

    @Override
    public void onPasswordChanged(Context context, Intent intent) {
            super.onPasswordChanged(context, intent);
            Log.d(TAG, "onPasswordChanged");
    }

    @Override
    public void onPasswordFailed(Context context, Intent intent) {
            super.onPasswordFailed(context, intent);
            Log.d(TAG, "onPasswordFailed");
    }

    @Override
    public void onPasswordSucceeded(Context context, Intent intent) {
            super.onPasswordSucceeded(context, intent);
            Log.d(TAG, "onPasswordSucceeded");
    }
}

If anyone can help me to get this to work, as I really can't figure out why the broadcast receiver isn't firing.


回答1:


Figured out problem, kind of stupid of me.

needed to put the receiver in the element.



来源:https://stackoverflow.com/questions/14200023/android-4-0-device-admin-receiver-not-working

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!