2013-01-07 33 views
1

我試圖構建一個非常簡單的應用程序來清除ICS設備上的所有用戶數據。Android 4.0設備管理接收器不工作

我試着使用上http://developer.android.com/guide/topics/admin/device-admin.htmlhttp://marakana.com/s/post/1291/android_device_policy_administration_tutorial

源代碼來創建應用程序,但我有一個問題,無論我做什麼,用於提示用戶允許管理員廣播接收器沒有出現!

繼承人我到目前爲止,如果有人可以幫助解決這個問題。

清單:

<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> 

活動:

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"); 
    } 
} 

如果有人可以幫助我得到這個工作,因爲我真的不能弄清楚爲什麼廣播接收機沒有發射。

回答

1

找出問題,有點愚蠢的我。

需要將接收器放入元素中。