0

LocationListenerのonProviderDisabledメソッドから通知を送信するにはどうすればよいですか?LocationListenerのonProviderDisabledメソッドから通知を送信するにはどうすればいいですか

これまでのところ、私が使用している:

Toast.makeText(mainmenu, "GPS Location providers are disabled... blah blah", Toast.LENGTH_LONG).show();}}); 

それはMAINMENUクラスが最初にインスタンス化されるときに保存された静的MAINMENU変数を使用して伴います - 私はMAINMENUオブジェクトの場合には、悪い考えであること、それをやって集めます私は推測するメモリから削除されます - だから私は通知を使用する必要があります。

私はインテントを作成するためにアクティビティへの参照を持つ必要があると思いますが、私のロケーションリスナーはそのような参照を保存していないので、どのアクティビティを参照できますか?

答えて

1

これがいつもうまくいくかどうかは分かりませんが、Application.getApplicationContext()に電話して、それを使用できます。

LocationListenerがアクティビティ(内部クラスの形式)の一部である場合は、this.MyActivityも使用できます。

+0

お電話でのお問い合わせgetApplicationContext()は、getApplicationContext()でこのエラーを返します。getApplicationContext()ContextWrapperタイプから非静的メソッドgetApplicationContext()への静的参照を作成できません " アプリケーションへの良い参照を取得するにはどうすればよいですか? –

+0

その場合、内部クラスとしてLocationListenerを実装し、Activity.thisを使用してコンテキストを取得できます。 –

+0

本当に、静的メソッドと静的変数のサポートクラス内にリスナーを定義してから、内部クラスを使用する代わりに参照を渡すことを選択しましたが、あなたの提案は特にAndroidの方がはるかに優れています。 –

0

あなたは、セットアップクラスのようなことができます:

public class myClass extends android.app.Application implements LocationListener{ 
    private LocationManager locationManager; 
    private String provider; 
    private Location location; 
    ... 

は、それからちょうどそのクラス内の関数を持っている:

public void onProviderDisabled(String provider) { 
    Toast.makeText(getApplicationContext(), "Disenabled provider " + provider, 
      Toast.LENGTH_SHORT).show(); 
} 
+0

しかし、私のLocationListenerはアクティビティ内で定義されていません。 「これ」は何を指しますか? –

+0

私は答えを編集しました。あなたはandroid.app.Applicationを拡張して、getApplicationContext()を呼び出すアクセス権を持っています。ちょっとハッキリですが、動作します! – Kenny

+0

興味深いですが、そのような単純なことの上ではかなり上に見えます。理由はわかりませんが、2番目のアプリケーションオブジェクトを作成するのは少し危険です。 静的な参照を使用する代わりに、アクティビティへの参照やアプリケーションへの参照を渡してからapp.getApplicationContext()を使用すると、アプリケーションへの参照を使用して、アクティビティへの参照を使用したもう一度私は理由が分からない。 –

1

あなたがあなた自身のインターフェイスを使用することができます。

public interface LocationUpdatesReveiver { 
    /** onLocationChanged */ 
    public void onLocationChanged(Location location); 
} 

そのインターフェイスを実装し、これがonLocationUpdateのためですが、あなたは可能性があなたの活動の実装方法

public class LocListener implements LocationListener { 

    private LocationUpdatesReveiver receiver; 

    public LocListener(LocationUpdatesReveiver receiver) { 
     this.receiver = receiver; 
    } 

    @Override 
    public void onLocationChanged(Location location) { 
     if(null != location){ 
      receiver.onLocationChanged(location); 
     } 
    } 
} 

を呼び出して、あなたのLocationListenerクラスに

public class MyActivity extends Activity implements LocationUpdatesReveiver{ 
... 
     location = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
     listener = new LocListener(MyActivity.this); 
} 

をそれの参照を渡すあなたの活動のクラスを作りますほとんどすべてに同じテクニックを使用してください。

関連する問題