0

場所、時間、連絡先、バッテリーレベルなどのいくつかの条件を保存するAndroidアプリケーションを作成しています。私がアプリケーションで行うことを意図しているのは、これらの条件が満たされた場合にユーザーがアクティブにしたい電話設定の変更とともに、これらの条件を保存することです。私の質問をリストに入れたほうがいいでしょう:

  1. デバイスの場所を定期的に確認するにはどうすればよいですか?デバイスの場所が変更された場合にコールバックをリッスンするために使用できるリスナーサービス(ContactsオプションのようにTelephonyManagerを使用できます)はありますか?
  2. Androidの時間に基づいて呼び出される特定の関数をスケジュールする方法はありますか?
  3. デバイスのバッテリーレベルが変化したとき、またはデバイスが充電中またはプラグが抜かれたときに特定の関数を呼び出す方法はありますか?
4

1 に答える 1

0

賢明な答えは次のとおりです。

1)LocationManagerを使用して、デバイスの場所を取得できます。

LocationManager locationManager = (LocationManager) 

this.getSystemService(Context.LOCATION_SERVICE);



LocationListener locationListener = new LocationListener() 
{


 public void onLocationChanged(Location location) 
 {

      makeUseOfNewLocation(location);  //here you get the new location
  }

    public void onStatusChanged(String provider, int status, Bundle extras) {}

    public void onProviderEnabled(String provider) {}

    public void onProviderDisabled(String provider) {}
  };


locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);

GeoCoderクラスを使用して、locationManagerから受け取った経度と緯度を使用して住所を正確に示すこともできます。詳細なチュートリアルはこちら-LocationManager

2)BroadcastReceiverおよびAlarmManagerサービスを使用して、呼び出される特定の関数をスケジュールできます。

private void setRecurringAlarm(Context context){

// we know mobiletuts updates at right around 1130 GMT.
// let's grab new stuff at around 11:45 GMT, inexactly
Calendar updateTime = Calendar.getInstance();
updateTime.setTimeZone(TimeZone.getTimeZone("GMT"));
updateTime.set(Calendar.HOUR_OF_DAY, 11);
updateTime.set(Calendar.MINUTE, 45);

Intent downloader = new Intent(context, AlarmReceiver.class);
PendingIntent recurringDownload = PendingIntent.getBroadcast(context,
        0, downloader, PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager alarms = (AlarmManager) getActivity().getSystemService(
        Context.ALARM_SERVICE);
alarms.setInexactRepeating(AlarmManager.RTC_WAKEUP,
        updateTime.getTimeInMillis(),
        AlarmManager.INTERVAL_DAY, recurringDownload);

}

詳細チュートリアルBroadCastReceiverおよびAlarmManager

したがって、必要に応じて、BroadCastReceiverのOnReceive内でデバイスの現在の場所を繰り返し確認できます(ポイント1に示すようにLocationManagerを使用)。

3)BatteryLevelが次のように変化したときにキャッチするBroadCastReceiverがあります。

private BroadcastReceiver mBatInfoReceiver 

= new BroadcastReceiver(){

    @Override
    public void onReceive(Context arg0, Intent intent) {
        int level = intent.getIntExtra("level", 0);
        // do something...
    }
}

    registerReceiver(this.mBatInfoReceiver, 
            new IntentFilter(Intent.ACTION_BATTERY_CHANGED));

プラグインまたは充電には、次のコードを使用します。

// Are we charging / charged?
int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);

boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
                     status == BatteryManager.BATTERY_STATUS_FULL;


// How are we charging?

int chargePlug = battery.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
boolean usbCharge = chargePlug == BATTERY_PLUGGED_USB;
boolean acCharge = chargePlug == BATTERY_PLUGGED_AC;

私はこれがすべてあなたを助けることを願っています...

于 2012-05-07T05:35:01.680 に答える