4

電話が場所に近づいたときに取得して更新しようとしています。addProximityAlert と requestLocationUpdates の両方を使用してみました

    LocationManager lm =(LocationManager) getSystemService(Context.LOCATION_SERVICE);
    Location l = lm.getLastKnownLocation("gps");
    Intent intent = new Intent("eu.mauriziopz.gps.ProximityAlert");
    PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent, 0);
    lm.addProximityAlert(12, 12, 100, 1000000, pIntent);

これは決してインテントを起動しません(手動で起動できるので、これが機能することはわかっています)。リスナーを使用してみましたが、一度しか実行されません。GPSを何度更新しても、二度と呼び出されません

    ProximityListener pl = new ProximityListener();
    lm. requestLocationUpdates("gps", 2000, 10, pl); 

これはアクティビティのコードです (最初のケースで呼び出されます)

public class ProximityAlert extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    Log.d("intent", "Hi");
    finish();
}

これがリスナーです

public class ProximityListener implements LocationListener {
String DEBUG_TAG = "ProximityListener";
@Override
public void onLocationChanged(Location location) {
    // TODO Auto-generated method stub
    Log.d(DEBUG_TAG, location.toString());

}

@Override
public void onProviderDisabled(String provider) {
    // TODO Auto-generated method stub

}

@Override
public void onProviderEnabled(String provider) {
    // TODO Auto-generated method stub

}

@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
    // TODO Auto-generated method stub

}
}

ありがとう

4

4 に答える 4

5

問題は、Intent/PendingIntentをどのように定義するかだと思います。インテントを使用してアクティビティを開始する方法は2つあり、含めたコードは2つの間のクロスのように見えます。

アクティビティを開始する標準的な方法は、現在のコンテキストとアクティビティのクラスを取得するIntentコンストラクターを使用し、getActivityメソッドonPendingIntentを使用してPendingIntentを作成することです。

Intent intent = new Intent(this, ProximityAlert.class);
PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent, 0);

IntentReceiverまたは、特定のアクション( "eu.mauriziopz.gps.ProximityAlert"など)をリッスンするIntentFilterを使用して、マニフェストのアクティビティにを追加することもできます。ただし、その場合は、を使用PendingIntent.getBroadcastしてPendingIntentを作成する必要があります。

Intent intent = new Intent("eu.mauriziopz.gps.ProximityAlert");
PendingIntent pIntent = PendingIntent.getBroadcast(this, 0, intent, 0);

すべての場合において、マニフェストで定義されたロケーションベースのサービスに対する正しい権限を持っていることを確認する必要があります。

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.INTERNET"/>

また、文字列「gps」を使用するのではなく、静的定数の使用を検討することもできますLocationManager.GPS_PROVIDER

于 2009-06-03T23:38:47.220 に答える
1

API は、addProximityAlertlat、long、radius、expiration、intent のパラメーターを定義します。-1ではなく有効期限を設定しようとしましたか100000

lm.addProximityAlert(12, 12, 100, 1000000, pIntent);

lm.addProximityAlert(12, 12, 100, -1, pIntent);
于 2011-12-19T05:43:39.363 に答える
1
Intent intent = new Intent("com.sccp.fourgdummy.REQUEST_DFGS");
intent.putExtra("launch_tab", "otp");
PendingIntent proximityIntent = PendingIntent.getActivity(this, 0, intent, Intent.FLAG_ACTIVITY_NEW_TASK);

これは重要 :Intent.FLAG_ACTIVITY_NEW_TASK

于 2011-06-21T08:29:05.490 に答える
0

既に onCreate メソッドで (finish() を呼び出して) アクティビティを終了する必要はないと思います。

于 2009-06-01T12:32:43.077 に答える