如何在应用程序启动期间获取位置

在我的应用程序中,我希望在应用程序启动期间获取当前位置。在我的主要活动(第一个活动)中,首先获取位置(经度和纬度)并保存共享首选项。之后,我放置HomeFragment。我想在应用程序打开时看到HomeFragment。 在我的HomeFragment中,我想获取sharedPrefreferences,而不是使用位置和纬度信息来计算距离。 但是,这不起作用,当我启动应用程序时,它在保存SharePreferences之前放置HomeFragment。如何在应用程序启动期间获取位置

这里是我的MainActivity:

public class MainActivity extends AppCompatActivity 

implements NavigationView.OnNavigationItemSelectedListener {

@Override

protected void onCreate(Bundle savedInstanceState) {

MyLocation myLocation = new MyLocation(this);

myLocation.getLocation(this, locationResult);

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

FragmentTransaction tx = getSupportFragmentManager().beginTransaction();

tx.replace(R.id.flContent, new HomeFragment());

tx.commit();

public MyLocation.LocationResult locationResult = new MyLocation.LocationResult() {

@Override

public void gotLocation(Location location) {

// TODO Auto-generated method stub

double Longitude = location.getLongitude();

double Latitude = location.getLatitude();

try {

System.out.println("lat"+Latitude);

System.out.println("long"+Longitude);

SharedPreferences locationpref = getApplication()

.getSharedPreferences("location", MODE_PRIVATE);

SharedPreferences.Editor prefsEditor = locationpref.edit(); prefsEditor.commit();

prefsEditor.putString("Longitude", Longitude + "");

prefsEditor.putString("Latitude", Latitude + "");

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

};

}

HomeFragment:

public class HomeFragment extends Fragment { 

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

if (getArguments() != null) {

mParam1 = getArguments().getString(ARG_PARAM1);

mParam2 = getArguments().getString(ARG_PARAM2);

}

}

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container,

Bundle savedInstanceState) {

// Inflate the layout for this fragment

View rootView = inflater.inflate(R.layout.fragment_home, container, false);

listView = (ListView) rootView.findViewById(R.id.list);

adapter = new CustomListAdapter(getActivity(), restaurantList);

listView.setAdapter(adapter);

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

Bundle bundle = new Bundle();

bundle.putString("restaurantId", String.valueOf(restaurantList.get(position).getId()));

MenuLineItemFragment fragment2 = new MenuLineItemFragment();

FragmentManager fragmentManager = getFragmentManager();

FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

fragmentTransaction.replace(R.id.flContent, fragment2);

fragmentTransaction.addToBackStack(null);

fragmentTransaction.commit();

}

});

SharedPreferences pref = getActivity().getApplication().getSharedPreferences("location", MODE_PRIVATE);

latitude = pref.getString("Latitude","");

longitude = pref.getString("Longitude","");

if(i==1){

request(); //I use longitude and latitude information in this method.

i++;

}

return rootView;

}

在我的清单文件,我给的权限。

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

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

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

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

如何在启动应用程序期间获取当前位置?另外,如果用户的位置关闭,我应该怎么做?

回答:

一些Location类方法是在后台完成,如getLongitudegetLatitude,是因为的getLocation需要时间不要紧代码Fragment初始化的哪一行或getLocation

在您的代码: -

你叫getLocation> GPS在后台运行,以获得位置>Fragment得到background初始化>getLocation完成并通过返回的值​​>gotLocation被调用。

解决方案: -

第一种方式是初始化gotLocationfragment,这是不推荐的。

方式二在sharedPrefreferences保存价值和更新您的UI(片段)时gotLocation结束(可能使用进度条和gotLocati enter code here后隐藏的称呼)。

以上是 如何在应用程序启动期间获取位置 的全部内容, 来源链接: utcz.com/qa/267394.html

回到顶部