BroadcastReceiver はプログラムから登録しているのでマニフェストでは指定していない。

package com.example.gpsintent2;
import android.location.Location;
import android.location.LocationManager;
import android.os.Bundle;
import android.app.Activity;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.util.Log;
import android.widget.TextView;
public class MainActivity extends Activity {
private static final String TAG = "MainActivity";
private static final String ACTION_LOCATION_UPDATE = "com.android.practice.ACTION_LOCATION_UPDATE";
private LocationManager locationManager;
private PendingIntent pendingIntent;
private LocationUpdateReceiver receiv;
public class LocationUpdateReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// TODO 自動生成されたメソッド・スタブ
Log.i(TAG, "onReceive");
String action = intent.getAction();
if (action != null && action.equals(ACTION_LOCATION_UPDATE)) {
final Location location = (Location) intent.getExtras().get(LocationManager.KEY_LOCATION_CHANGED);
if (location == null) {
return;
}
updateView(location);
}
}
private void updateView(Location location) {
// TODO 自動生成されたメソッド・スタブ
TextView textView = (TextView) findViewById(R.id.textView1);
textView.setText(String.valueOf(location.getLatitude()));
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.i(TAG, "************** onCreate");
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
IntentFilter filter = new IntentFilter();
filter.addAction(ACTION_LOCATION_UPDATE);
receiv = new LocationUpdateReceiver();
registerReceiver(receiv, filter);
}
@Override
protected void onResume() {
super.onResume();
Log.i(TAG, "onResume");
Intent intent = new Intent();
intent.setAction(ACTION_LOCATION_UPDATE);
pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
for (String providerName : locationManager.getAllProviders()) {
if (locationManager.isProviderEnabled(providerName)) {
Log.d(TAG, "Provider: " + providerName);
// LocationManagerにPendingIntentを登録
locationManager.requestLocationUpdates(providerName, 0, 0, pendingIntent );
}
}
}
@Override
protected void onPause() {
super.onPause();
Log.i(TAG, "onPause");
unregisterReceiver(receiv);
locationManager.removeUpdates(pendingIntent);
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView" />
</LinearLayout>
0 件のコメント:
コメントを投稿