1

エラーヘルパークラスの使用。 (別のJavaファイルを作成した)私はマニフェストでregistredで活動Javaファイルを作成されなかったと私はこの次のクラス(Javaファイル)を登録didn't何 :ヘルパークラス - 活動ComponentInfoを開始することができませんエラー:コードとseperatingで実験のonCreate()</p> <p>- 私の前に活動に利用できないシステムサービス:java.lang.IllegalStateException:活動ComponentInfoを開始することができません

import android.app.Activity; 
import android.location.LocationManager; 
import android.net.ConnectivityManager; 
.... 


public class DeviceMonitor extends Activity { 

    boolean laag=false; 
    int level=-1; 
    double batterylevel=-1; 


    public boolean GPSEnabled() { 

    final LocationManager manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 

    if (!manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { // NO GPS ENABLED 
     //ErrorMessage.append(R.string.enablegps); 
     //ErrorMessage.append("\n"); 
     Log.d("StartPrepare","GPS DISABLED"); 
     return false; 
        } else { 
     Log.d("StartPrepare","GPS ENABLED"); 
     return true; 
        } 
    } 

私はOnCreate関数()メソッドを削除、 これは正しいです? マニフェストに登録されていなければなりませんか?

このようなregistred Activityから呼び出している間、私は次のエラーを受け取った:

DeviceMonitor MyDevice = new DeviceMonitor(); 
if (MyDevice.GPSEnabled()){gpsenabled=true;}else{gpsenabled=false;fout=true;} 

エラー:ヘルパークラスに私にいくつかの光を与えることができ

E/AndroidRuntime(1912): java.lang.RuntimeException: Unable to start activity ComponentInfo{package}: java.lang.IllegalStateException: System services not available to Activities before onCreate()

は誰( - 私の種類をJava/Androidの新機能)、エラーが原因で何が起こるかを知ることができますか?私はOnCreate()メソッドを追加しようとしましたが、それは役に立たなかった。

ありがとうございます!

+0

コンテキストは、活動ののonCreate()メソッド内で使用可能です。問題を引き起こしている可能性のあるonCreate()を削除しました。これをHelperクラスとして扱いたいのであれば、なぜActivityを拡張したのですか?あなたの活動から呼び出されるいくつかの方法があります。メソッドを呼び出すと、アクティビティはコンテキストを渡す必要があります。 – kosa

+0

したがって、呼び出すアクティビティのメソッドはコンテキストを渡す必要がありますか?あなたは私のコードの例を教えてくれますか?ありがとう – Diego

答えて

1

これをしない...

DeviceMonitor MyDevice = new DeviceMonitor(); 

DeviceMonitorActivityを拡張し、あなたはnewを使用してActivityのインスタンスを作成することはありません。 Android Activityは特殊なクラスであり、通常のJavaクラスのように扱うべきではありません。

Activityを開始する場合は、startActivity...)または他の「開始」方法のいずれかを使用して行う必要があります。

「ヘルパー」クラスが必要な場合は、何も拡張しない標準のJavaクラスを作成するだけです。あなたがメインのActivityからのインスタンスを作成すると、その後、...などの例のAndroidサービスにアクセスするために

public class DeviceMonitor { 

    Context mContext = null; 

    public DeviceMonitor (Context context) { 
     mContext = context; 
    } 
} 

EDITそれを使用して、コンストラクタでそれにActivityContextを渡す:あなたのヘルパーを作成するにはをし、 Activityこれを行うメインからContextを渡す...

// An Activity IS a Context so pass 'this' 
DeviceMonitor MyDevice = new DeviceMonitor(this); 
+0

ありがとう!別のアクティビティを開始したくないので、実際には拡張アクティビティを削除する必要があります。私は利用できない方法をどのように解決すべきかはわかりませんが。私がクラスの活動を拡張しなければ、突然getSystemserviceは利用できません。 onCreate()メソッドがまだ必要ですか? – Diego

+0

私が言ったように、あなたは 'mContext.getSystemService(...)'のようにヘルパークラスに渡された 'Context'を使います。いいえ、あなたのヘルパーはAndroidコンポーネントではないので、 'onCreate(...)'はそれに関連するメソッドではありません。 – Squonk

+0

また、 'this'をヘルパーのコンストラクタに' Context'として渡して、私の答えに編集してください。 – Squonk

0

あなたはのonCreate()メソッドは、クラスまたはサービスにcalldedされた後、あなたの

boolean GPSEnabled 

を宣言する必要があります。

+0

申し訳ありませんが、私は愚かな質問をするが、私はまだすべてを考え出している。@thinksteep、Activityクラスを拡張しないと、getSystemServiceが認識されません(利用できません)。これを処理する正しい方法は何ですか?さらに、onCreate()メソッドを戻しましたが、問題を解決しません。マニフェストにファイルを登録する必要がありますか?感謝! – Diego

関連する問題