location
をbackground
からserver
に送信したいので、Job scheduler
またはService
のように同じことを行うのが最適です。なぜ ?。私もjob scheduler
で保存されたバッテリーについて知りたいのですが、私たちは引き続きweb api
を呼び出します。アンドロイドのジョブスケジューラやサービスのようなバックグラウンド作業に最適なオプションはどれですか?
-2
A
答えて
0
これは私の実装です。Job Scheduler
またはService
は使用しません。必要ないためです。 Application
クラスを使用するので、すべてのアプリでユーザーの場所を取得できるようになります。その場所が変更されたとき、私たちは新しい場所を設定するには、Applicationクラスを呼び出すこと
public class LocationHelper implements GoogleApiClient.ConnectionCallbacks,
GoogleApiClient.OnConnectionFailedListener, LocationListener {
private static final int REQUEST_LOCATION_PERMISSION = 0;
private static final int REQUEST_RESOLVE_ERROR = 1;
private static GoogleApiClient mGoogleApiClient;
private Fragment mFragment;
private final Activity mActivity;
private final Callback mCallback;
private Location mLastLocation;
private boolean mResolvingError;
private LocationRequest mLocationRequest;
private boolean mRegisterLocationUpdates;
public interface Callback {
void onLastLocation(Location userLocation);
}
public LocationHelper(Fragment fragment, Callback callback) {
this(fragment.getActivity(), callback);
mFragment = fragment;
}
public LocationHelper(Activity activity, Callback callback) {
mActivity = activity;
mCallback = callback;
mLocationRequest = new LocationRequest();
mGoogleApiClient = new GoogleApiClient.Builder(mActivity)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
}
@Override
public void onConnected(@Nullable Bundle bundle) {
obtainLastLocation();
}
private void obtainLastLocation() {
// Verifies if user give us permission to obtain its suggestionLocationV2.
if (ActivityCompat.checkSelfPermission(mActivity,
Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
&& ActivityCompat.checkSelfPermission(mActivity,
Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
// Should we show an explanation?
if (ActivityCompat.shouldShowRequestPermissionRationale(mActivity,
Manifest.permission.ACCESS_COARSE_LOCATION)) {
// Show an explanation to the user why we need its suggestionLocationV2.
requestPermissionRationale();
} else {
requestPermission();
}
// We don't have user permission to get its geo suggestionLocationV2, abort mission.
return;
}
if (!mGoogleApiClient.isConnected()) {
mGoogleApiClient.connect();
return;
}
Location lastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
if (lastLocation != null) {
onLocationChanged(lastLocation);
} else {
LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this);
mRegisterLocationUpdates = true;
}
}
@Override
public void onLocationChanged(Location location) {
if (location == null) return;
removeLocationUpdatesIfNeed();
mLastLocation = location;
DirectoryApp.getInstance().setLastLocation(mLastLocation);
if (mCallback != null) {
mCallback.onLastLocation(mLastLocation);
}
}
private void removeLocationUpdatesIfNeed() {
if (mRegisterLocationUpdates && mGoogleApiClient.isConnected()) {
LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, this);
mRegisterLocationUpdates = false;
}
}
private void requestPermission() {
// Lets ask suggestionLocationV2 permission to user.
if (mFragment != null) {
mFragment.requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION},
REQUEST_LOCATION_PERMISSION);
} else {
ActivityCompat.requestPermissions(mActivity,
new String[]{Manifest.permission.ACCESS_COARSE_LOCATION},
REQUEST_LOCATION_PERMISSION);
}
}
private void requestPermissionRationale() {
new AlertDialog.Builder(mActivity)
.setMessage("We need the suggestionLocationV2 to provide you best results.")
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
requestPermission();
}
})
.show();
}
@Override
public void onConnectionSuspended(int i) {
}
@Override
public void onConnectionFailed(@NonNull ConnectionResult result) {
// If not already attempting to resolve an error.
if (!mResolvingError) {
if (result.hasResolution()) {
try {
mResolvingError = true;
result.startResolutionForResult(mActivity, REQUEST_RESOLVE_ERROR);
} catch (IntentSender.SendIntentException e) {
// There was an error with the resolution intent. Try again.
mGoogleApiClient.connect();
}
} else {
GooglePlayServicesUtil.showErrorDialogFragment(result.getErrorCode(), mActivity,
null, REQUEST_RESOLVE_ERROR, null);
mResolvingError = true;
}
}
}
// The follow methods should be called in Activity or Fragment.
public void onStart() {
mGoogleApiClient.connect();
}
public void onStop() {
removeLocationUpdatesIfNeed();
mGoogleApiClient.disconnect();
}
public void onRequestPermissionResult(int requestCode, String[] permissions,
int[] grantResults) {
if (requestCode == REQUEST_LOCATION_PERMISSION
&& grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// Permission granted. Uhull lets get its suggestionLocationV2 now.
obtainLastLocation();
}
}
}
注:
まず、あなたはあなたのためにすべての作業を行いますLocationHelper
クラスを作成する必要があります
public class Application extends MultiDexApplication {
private static App instance;
private Location mLastLocation;
@Override
public void onCreate() {
super.onCreate();
instance = this;
}
public void setLastLocation(Location lastLocation) {
mLastLocation = lastLocation;
}
public Location getLastLocation() {
return mLastLocation;
}
そして、あなたはFragment
またはActivity
に、場所を使用する必要がある場合、最終的に、ちょうどmethod`sを使用してそれを起動および停止:あなたのアプリケーションクラスでは、メソッドを作成する必要があります。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
locationHelper = new LocationHelper(this, this);
}
@Override
public void onStart() {
super.onStart();
locationHelper.onStart();
}
@Override
public void onStop() {
super.onStop();
locationHelper.onStop();
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
locationHelper.onRequestPermissionResult(requestCode, permissions, grantResults);
}
0
あなたは、「ほとんどのバッテリー効率的な方法」と「最良の選択肢」を定義した場合:activlyデータを読み取るか、転送し、インターネットに接続する通話を最小限に抑えるようにしてください。
代わりに、既にインターネットトラフィックが進行中であることをアプリに伝えるブロードキャスト受信機を実装します。あなたがブロードキャスト通知を受信すると、ist自身のインターネットトラフィックを追加することができます。あなたのアプリは非常にバッテリーが高価ですが、インターネットに接続するのバッテリーのオーバーヘッドを避けることができますこのように。
詳細についてhttps://developer.android.com/training/efficient-downloads/efficient-network-access.htmlあなたはuser`sデバイスから位置を取得したい
関連する問題
- 1. Amazon Webサービスでの作業に最適なアドバイス
- 2. アンドロイドでのローカルキャッシュにはどのような方法が最適ですか?
- 3. iosやアンドロイドのwhatsappやinstagramのような画像の最適化
- 4. アンドロイド:どのようにバックグラウンド
- 5. アンドロイドで最初に実行されるアクティビティやサービスに関係なく、アンドロイドでコードを実行するにはどうすればよいですか?
- 6. XSLファイルの作成に最適なツールはどれですか?
- 7. Herokuはどのようなサイト/アプリに最適ですか?
- 8. Rパッケージにはどのようなライセンスが最適ですか?
- 9. postgresノードjsを照会するのに最適なオプションはどれですか?
- 10. アンドロイドでさまざまな解像度で作業するにはどうすればよいですか?
- 11. arduino - millis()またはスケジューラライブラリでマルチタスクに最適なオプションはどれですか?
- 12. アンドロイドProGuardの作業ではない
- 13. ASP.NETのモーダルポップアップウィンドウに最適なオプションは?
- 14. 最適なbcrypt作業係数
- 15. AWS-EC2やPythonanywhereのようなサービス中のセレンドライバの最大数はどれくらいですか
- 16. フレームワークにとらわれないRubyバックグラウンドワーカーライブラリの最適なオプションは何ですか?
- 17. Android開発でバックグラウンドでスレッドやサービスを追加するにはどうすればよいですか?
- 18. サービスとユーザーとのやり取りに最適な方法
- 19. Pagespeedの最適化後に作業ができない
- 20. html5タブレットサイトのフロントエンドのヘルパーやフレームワークに最適な最新のオプションは何ですか?
- 21. データベース:私のプロジェクトに最適なオプションは何ですか
- 22. VSC++ 2008の最適化オプションはどのように機能しますか?
- 23. ui-Gridやag-Gridなど、角型アプリケーションに最適ですか?
- 24. LLVM最適化パスにはどのレベルの作業が必要ですか?
- 25. ウェブサイトやウェブアプリケーションにはどのような認証オプションがありますか?
- 26. symfony2:サービス内のクエリに最適な場所は何ですか?
- 27. スタティックファイルに最適なAWSサービス
- 28. はアンドロイド優先度ジョブキューとジョブスケジューラの2つの異なるものですか?
- 29. 私はこのような作業をWebサービスを持ってJAXWSサービス
- 30. は、私はこのようなサービスを指定すると、バックグラウンド
で「バンドルtranfer」を参照してください? –
@ Luiz Fernando Salvaterra - はい。 –
場所の変更を継続的にリスンしている場合、アプリはジョブスケジューラまたはサービスに関係なくバッテリを消耗します。 –