2011-04-27 8 views
0

Je suis bloqué sur cette erreur ClassCastException depuis un moment maintenant, quelqu'un peut-il aider à jeter un coup d'oeil? Essentiellement, j'essaie de suivre l'exemple android Device Admin en étendant DeviceAdminReceiver. J'ai fondamentalement tout enlevé et je veux juste tester la fonction lockNow().Android/Java ClassCastException erreur

Ceci est mon code:


package com.example.locknow; 

public class LockNow extends DeviceAdminReceiver { 

void showToast(Context context, CharSequence msg){ 
    Toast.makeText(context, "Lock_Now App: " + msg, Toast.LENGTH_SHORT).show(); 
} 

@Override 
public void onEnabled(Context context, Intent intent){ 
    showToast(context, "enabled"); 
} 
@Override 
public void onDisabled(Context context, Intent intent){ 
    showToast(context, "disabled"); 
} 

public static class Controller extends Activity { 

    static final int REQUEST_CODE_ENABLE_ADMIN = 1; 

    DevicePolicyManager mDPM; 
    ActivityManager mAM; 
    ComponentName mLockNow; 

    Button mEnableButton; 
    Button mDisableButton; 
    Button mForceLockButton; 

    /** Called when the activity is first created. */ 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     mDPM = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE); 
     mAM = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE); 
     mLockNow = new ComponentName(Controller.this, LockNow.class); 

     setContentView(R.layout.main); 

     mEnableButton = (Button)findViewById(R.id.enable_button); 
     mEnableButton.setOnClickListener(mEnableListener); 
     mDisableButton = (Button)findViewById(R.id.disable_button); 
     mDisableButton.setOnClickListener(mDisableListener); 
     mForceLockButton = (Button)findViewById(R.id.force_lock_button); 
     mForceLockButton.setOnClickListener(mForceLockListener); 
    } 

    void updateButtonStates(){ 
     boolean active = mDPM.isAdminActive(mLockNow); 
     if (active) { 
      mEnableButton.setEnabled(false); 
      mDisableButton.setEnabled(true); 
      mForceLockButton.setEnabled(true); 
     } else { 
      mEnableButton.setEnabled(true); 
      mDisableButton.setEnabled(false); 
      mForceLockButton.setEnabled(false); 
     } 
    } 

    private OnClickListener mEnableListener = new OnClickListener(){ 
     public void onClick(View v){ 
      Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); 
      intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mLockNow); 
      intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "additional text"); 
      startActivityForResult(intent, REQUEST_CODE_ENABLE_ADMIN); 
     } 
    }; 

    private OnClickListener mDisableListener = new OnClickListener(){ 
     public void onClick(View v){ 
      mDPM.removeActiveAdmin(mLockNow); 
      updateButtonStates(); 
     } 
    }; 

    private OnClickListener mForceLockListener = new OnClickListener(){ 
     public void onClick(View v){ 
      boolean active = mDPM.isAdminActive(mLockNow); 
      if (active){ 
       mDPM.lockNow(); 
      } 
     } 
    }; 


} 

}


C'est le manifeste:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="com.example.locknow" 
     android:versionCode="1" 
     android:versionName="1.0"> 
    <uses-sdk android:minSdkVersion="8" /> 
    <uses-permission android:name="android.permission.BIND_DEVICE_ADMIN" /> 

    <application android:icon="@drawable/icon" android:label="@string/app_name"> 
     <activity android:name=".LockNow" 
        android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity android:name=".LockNow$Controller"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.SAMPLE_CODE" /> 
      </intent-filter> 
     </activity> 
     <receiver android:name=".LockNow" 
        android:label="@string/sample_lock_now" 
        android:permission="android.permission.BIND_DEVICE_ADMIN"> 
      <intent-filter> 
       <action android:name="android.action.DEVICE_ADMIN_ENABLED" /> 
      </intent-filter>     
     </receiver> 
    </application> 
</manifest> 

Et la ru erreur Ntime:

04-27 04:02:47.785: ERROR/AndroidRuntime(1553): FATAL EXCEPTION: main 
04-27 04:02:47.785: ERROR/AndroidRuntime(1553): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.locknow/com.example.locknow.LockNow}: java.lang.ClassCastException: com.example.locknow.LockNow 
04-27 04:02:47.785: ERROR/AndroidRuntime(1553):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2585) 
04-27 04:02:47.785: ERROR/AndroidRuntime(1553):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
04-27 04:02:47.785: ERROR/AndroidRuntime(1553):  at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
04-27 04:02:47.785: ERROR/AndroidRuntime(1553):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
04-27 04:02:47.785: ERROR/AndroidRuntime(1553):  at android.os.Handler.dispatchMessage(Handler.java:99) 
04-27 04:02:47.785: ERROR/AndroidRuntime(1553):  at android.os.Looper.loop(Looper.java:123) 
04-27 04:02:47.785: ERROR/AndroidRuntime(1553):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
04-27 04:02:47.785: ERROR/AndroidRuntime(1553):  at java.lang.reflect.Method.invokeNative(Native Method) 
04-27 04:02:47.785: ERROR/AndroidRuntime(1553):  at java.lang.reflect.Method.invoke(Method.java:521) 
04-27 04:02:47.785: ERROR/AndroidRuntime(1553):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
04-27 04:02:47.785: ERROR/AndroidRuntime(1553):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
04-27 04:02:47.785: ERROR/AndroidRuntime(1553):  at dalvik.system.NativeStart.main(Native Method) 
04-27 04:02:47.785: ERROR/AndroidRuntime(1553): Caused by: java.lang.ClassCastException: com.example.locknow.LockNow 
04-27 04:02:47.785: ERROR/AndroidRuntime(1553):  at android.app.Instrumentation.newActivity(Instrumentation.java:1021) 
04-27 04:02:47.785: ERROR/AndroidRuntime(1553):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2577) 
04-27 04:02:47.785: ERROR/AndroidRuntime(1553):  ... 11 more 

Je suis un débutant en Java et Android, toute aide est très appréciée !! Merci, -J

Répondre

0

Votre LockNow classe ne s'étend pas Activity, mais un Receiver, donc vous devriez le déclarer de cette façon dans votre androidManifest.xml. Vous avez déclaré à la fois un activity et un receiver pour la même classe LockNow.

Vous devez déposer la déclaration d'activité:

<activity android:name=".LockNow" android:label="@string/app_name"> 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
</activity> 

Laissez la Controller classe sous-jacente comme main launcher activity, la classe LockNow comme receiver.

0

Selon Documentation DeviceAdminReceiver n'est pas une activité et donc il ne devrait probablement pas être défini comme un. Selon le Example le récepteur réel appartient à <receiver> étiquettes.