2013-08-16 51 views
0

如果有人能幫助,那就太棒了。 我看了解其他地方提供的解決方案,他們似乎不能解決我的問題。Android設備管理員無法實例化接收器

我正在使用DeviceAdminReceiver並在按下按鈕時測試了鎖定設備。 它實際上工作,但我第一次運行應用程序,我得到一個活動崩潰。 (這次崩潰只會在第一次運行時發生)。

java.lang.RuntimeException: Unable to instantiate receiver c: java.lang.InstantiationException: can't instantiate class com.example.deviceadmin.MainActivity$myAdmin; no empty constructor 

我已經試過很多事情來解決這個問題:

1)添加構造函數DeviceAdminReceiver
2的子類)調用超級構造函數中。

這是我見過的解決方案,但它不起作用。

在這裏被簡化代碼我的應用程序的:

公共類MainActivity延伸活動{

protected static final int REQUEST_ENABLE = 0; 
private static final String LOG = "adminClient"; 
private DevicePolicyManager mDPM; 
private ComponentName mAdminName; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    Log.d(LOG, "onCreate"); 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    mDPM = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE); 
    mAdminName = new ComponentName(this, myAdmin.class); 
    Log.d(LOG, "mAdminName = " + mAdminName.toString()); 

    Button deviceLock = (Button) findViewById(R.id.button1); 

    deviceLock.setOnClickListener(new OnClickListener() { 


     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      Log.d(LOG, "LockPhone clicked"); 
      lockPhone(); 
     } 

    }); 

} 





protected void lockPhone() { 
     if (!mDPM.isAdminActive(mAdminName)) { 

      Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); 
      intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, 
      mAdminName); 
      intent.putExtra("force-locked", DeviceAdminInfo.USES_POLICY_FORCE_LOCK);   
      startActivityForResult(intent, REQUEST_ENABLE); 
      } 
      else { 
      Log.d(LOG, "lockDown phone"); 
      mDPM.lockNow(); 
      } 
} 


class myAdmin extends DeviceAdminReceiver { 

    public myAdmin(){ 
     super(); 

    } 


} 

}

日誌

08-16 14:46:06.383: E/AndroidRuntime(17963): FATAL EXCEPTION: main 
08-16 14:46:06.383: E/AndroidRuntime(17963): java.lang.RuntimeException: Unable to instantiate receiver com.example.deviceadmin.MainActivity$myAdmin: java.lang.InstantiationException: can't instantiate class com.example.deviceadmin.MainActivity$myAdmin; no empty constructor 
08-16 14:46:06.383: E/AndroidRuntime(17963): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2356) 
08-16 14:46:06.383: E/AndroidRuntime(17963): at android.app.ActivityThread.access$1500(ActivityThread.java:140) 
08-16 14:46:06.383: E/AndroidRuntime(17963): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1309) 
08-16 14:46:06.383: E/AndroidRuntime(17963): at android.os.Handler.dispatchMessage(Handler.java:99) 
08-16 14:46:06.383: E/AndroidRuntime(17963): at android.os.Looper.loop(Looper.java:137) 
08-16 14:46:06.383: E/AndroidRuntime(17963): at android.app.ActivityThread.main(ActivityThread.java:5047) 
08-16 14:46:06.383: E/AndroidRuntime(17963): at java.lang.reflect.Method.invokeNative(Native Method) 
08-16 14:46:06.383: E/AndroidRuntime(17963): at java.lang.reflect.Method.invoke(Method.java:525) 
08-16 14:46:06.383: E/AndroidRuntime(17963): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:821) 
08-16 14:46:06.383: E/AndroidRuntime(17963): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:588) 
08-16 14:46:06.383: E/AndroidRuntime(17963): at dalvik.system.NativeStart.main(Native Method) 
08-16 14:46:06.383: E/AndroidRuntime(17963): Caused by: java.lang.InstantiationException: can't instantiate class com.example.deviceadmin.MainActivity$myAdmin; no empty constructor 
08-16 14:46:06.383: E/AndroidRuntime(17963): at java.lang.Class.newInstanceImpl(Native Method) 
08-16 14:46:06.383: E/AndroidRuntime(17963): at java.lang.Class.newInstance(Class.java:1130) 
08-16 14:46:06.383: E/AndroidRuntime(17963): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2351) 
08-16 14:46:06.383: E/AndroidRuntime(17963): ... 10 more 
+0

它撞上了什麼? – BigT

回答

0

myAdmin需要是public static內部類,否則單獨public Java類。你有一個非public,非static內部類,這將無法正常工作。

+0

是的,這是行之有效的! – drlobo

相關問題