やりたいことはANDROIDで定期的に現在地を取得したい(画面なしで)。
さらにそれを常駐させたい。
ということなのです。
まず常駐は
http://language-and-engineering.hatenablog.jp/entry/20120724/AndroidAutoStartingResidentServiceBatch
をみてサービスとして常駐させることができました。
そこでこのサービス開始の時点で以下のように
ざっくり10秒毎に位置取得してみましたが
これではAPP終了時位置が取れなくなります。
これ多分
locationManager = (LocationManager)
context.getSystemService(Context.LOCATION_SERVICE);
のところで画面context=(MainActivity.this)を渡しているせいなのだろうと考えますがどうやって克服すべきかわかりません。
あるいは全くGUIなしでGPSにアクセスする手法があるのでしょうか?
お教えください
lang
1public SamplePeriodicService startResident(Context context) { 2 3 SamplePeriodicService ret = (SamplePeriodicService) super.startResident(context); 4 5 locationManager = (LocationManager) 6 context.getSystemService(Context.LOCATION_SERVICE); 7 8 locationListener = new MyLocationListener(); 9 PackageManager pm=context.getPackageManager(); 10 if (pm.checkPermission( Manifest.permission.ACCESS_FINE_LOCATION,context.getPackageName()) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 11 // TODO: Consider calling 12 // ActivityCompat#requestPermissions 13 // here to request the missing permissions, and then overriding 14 // public void onRequestPermissionsResult(int requestCode, String[] permissions, 15 // int[] grantResults) 16 // to handle the case where the user grants the permission. See the documentation 17 // for ActivityCompat#requestPermissions for more details. 18 return ret; 19 } 20 locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 10000, 0, locationListener); 21 22 23 return ret; 24 25 26 27 }
MaiinActivity
lang
1public class MainActivity extends AppCompatActivity { 2 3 @Override 4 protected void onCreate(Bundle savedInstanceState) { 5 super.onCreate(savedInstanceState); 6 setContentView(R.layout.activity_main); 7 8 9 10 { 11 Button button = (Button) findViewById(R.id.button); 12 // ボタンがクリックされた時に呼び出されるコールバックリスナーを登録します 13 button.setOnClickListener(new View.OnClickListener() { 14 @Override 15 public void onClick(View v) { 16 // ボタンがクリックされた時に呼び出されます 17 Button button = (Button) v; 18 Toast.makeText(MainActivity.this, "start", 19 Toast.LENGTH_SHORT).show(); 20 new SamplePeriodicService().startResident(MainActivity.this); 21 } 22 }); 23 24 } 25 { 26 Button button = (Button) findViewById(R.id.button2); 27 // ボタンがクリックされた時に呼び出されるコールバックリスナーを登録します 28 button.setOnClickListener(new View.OnClickListener() { 29 @Override 30 public void onClick(View v) { 31 // ボタンがクリックされた時に呼び出されます 32 Button button = (Button) v; 33 Toast.makeText(MainActivity.this, "stop", 34 Toast.LENGTH_SHORT).show(); 35 SamplePeriodicService.stopResidentIfActive(MainActivity.this); 36 } 37 }); 38 39 } 40 } 41}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。