2015-10-04 47 views
0

我一直在嘗試使用鎖屏概念作爲幹運行的應用程序我創建了一個應用程序,該應用程序在點擊給定按鈕後鎖定屏幕,以及我使用的基本概念沒有什麼新的,這裏是我的Java代碼方法OnCreate(bundle)永遠不會被調用和應用程序崩潰

package com.example.gaurav.locknowtest2; 
import android.app.Activity; 
import android.content.ComponentName; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.app.admin.DevicePolicyManager; 
import android.app.admin.DeviceAdminReceiver; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 

public class MainActivity extends DeviceAdminReceiver{ 
    public class controller extends Activity{ 
     DevicePolicyManager dpm; 
     ComponentName comname; 
     Button b1; 
     TextView display; 
     public void OnCreate(Bundle xyz){ 
      super.onCreate(xyz); 
      dpm=(DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE); 
      comname=new ComponentName(this,MainActivity.class); 
      setContentView(R.layout.activity_main); 
      b1=(Button)findViewById(R.id.start); 
      display=(TextView)findViewById(R.id.xyz); 
      b1.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); 
        intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, comname); 
        startActivityForResult(intent,1); 
        display.setText("just to test the method"); 

       } 
      }); 
     } 
     @Override 
     protected void onActivityResult(int requestCode, int resultCode, 
             Intent data) { 
      super.onActivityResult(requestCode, resultCode, data); 

      switch (requestCode) { 
       case 1: 
        if (resultCode == Activity.RESULT_OK) { 
         dpm.lockNow(); 
        } else { 
         Log.i("DeviceAdminSample", "Administration enable FAILED!"); 
        } 
        return; 
      } 
     } 
    } 
} 

下了起來,這裏是我的清單,我認爲是創造一切問題

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.gaurav.locknowtest2" > 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name=".MainActivity$controller" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <receiver 
      android:name=".MainActivity" 
      android:permission="android.permission.BIND_DEVICE_ADMIN" > 
     <meta-data 
      android:name="android.app.device_admin" 
      android:resource="@xml/device_admin_sample" /> 

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

</manifest> 

我需要得到這個這個做一週,所以請看看..

+0

請發佈崩潰日誌。 – Antrromet

+0

'controller'是一個擴展了'Activity'的內部類。我不確定你是否可以這樣做。 –

+0

@PaulBoddington不,我相當肯定你可以做到這一點,只要它是一個靜態的內部類,即使這樣你就必須在清單中用$符號指定它 – EpicPandaForce

回答

1

Java是大小寫敏感的,所以命名你的方法

public void OnCreate(Bundle bundle) { 

protected void onCreate(Bundle bundle) { 

使用@Override註釋來確保您實際上覆蓋方法

此外,public class controller extends Activity {應該public static class controller extends Activity {除了一個事實,即按Java命名約定,類應具有ç apital字母開頭。

+1

只是爲了完整起見,如果沒有可覆蓋的方法(使用您使用的名稱),「@ Override」會產生編譯時錯誤。 – goncalotomas

+0

@EpicPandaForce thnk你工作,我只是缺少靜態部分 – gaurav21

2

你的方法沒有寫成correcrt。

public void OnCreate(Bundle xyz){ 

你有一個大寫的O 它應該是這樣的:

@Override 
    public void onCreate(Bundle savedInstanceState) { 
... 
} 
+0

這是一個偉大的發現。這種簡單的錯誤發生在java中的新人 – haseeb

+2

這些錯誤可以通過使用@ @ Override註釋來避免。 – Ridcully

+0

Yeap,但(!!)如果你寫自己的代碼而不是複製粘貼,這是學習編碼的最好原因。 – Shahar

0

一類擴展Activity因爲android系統需要能夠創造新的實例不能是一個內部類另一個類的你的Activity類沒有另一個類的實例。您的controller類是MainActivity的內部類,因此如果沒有MainActivity的實例就不能實例化。

看到這個答案:

Nested inner Activity class in android

此外,如被別人指出的那樣,你在onCreate有一個錯字。這意味着你已經制定了一個完全獨立的方法,不會被覆蓋onCreate。但是這並不能解釋應用程序崩潰的原因。 (你可以寫一個Activity類不替換onCreate,和它的作品沒有被拋出任何異常。)

+0

啊......你分享的鏈接有意見表明可以用它作爲內部類 – gaurav21

+0

@ gaurav21靜態嵌套,但不是內在。 –

相關問題