Commit fa87219c authored by Administrator's avatar Administrator

定位支持搜索

parent 17dc28fd
......@@ -55,6 +55,7 @@ dependencies {
implementation 'com.android.support:cardview-v7:28.0.0'
implementation 'com.android.support:recyclerview-v7:28.0.0'
implementation 'com.android.support:design:28.0.0'
compileOnly 'com.virjar:ratel-api:1.3.5'
compileOnly 'com.virjar:ratel-api:1.3.6'
implementation 'liji.library.dev:citypickerview:5.2.4'
implementation 'com.virjar:ratel-extersion:1.0.6'
}
......@@ -15,6 +15,7 @@
<uses-permission android:name="android.permission.INTERNET" />
<application
tools:replace="android:theme"
android:name="top.littlerich.virtuallocation.common.AppApplication"
android:allowBackup="true"
android:icon="@mipmap/logo_launcher"
......@@ -61,6 +62,7 @@
<activity android:name="top.littlerich.virtuallocation.activity.AppsActivity">
</activity>
<activity android:name="com.lljjcoder.style.citylist.CityListSelectActivity"/>
<provider
android:name="top.littlerich.virtuallocation.service.GPSContentProvider"
android:authorities="com.virjar.ratel.virtuallocation"
......
......@@ -43,7 +43,7 @@ public class AboutActivity extends AppCompatActivity {
});
}
public static void openActivity(Context conetxt){
public static void openActivity(Context conetxt) {
Intent intent = new Intent(conetxt, AboutActivity.class);
conetxt.startActivity(intent);
}
......
......@@ -3,6 +3,7 @@ package top.littlerich.virtuallocation.activity;
import android.Manifest;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.location.LocationManager;
import android.os.Bundle;
......@@ -10,13 +11,20 @@ import android.os.Handler;
import android.os.Looper;
import android.support.annotation.NonNull;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.view.Gravity;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.view.animation.LinearInterpolator;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
......@@ -35,10 +43,24 @@ import com.baidu.mapapi.map.MarkerOptions;
import com.baidu.mapapi.map.MyLocationConfiguration;
import com.baidu.mapapi.map.OverlayOptions;
import com.baidu.mapapi.model.LatLng;
import com.baidu.mapapi.search.core.PoiInfo;
import com.baidu.mapapi.search.core.SearchResult;
import com.baidu.mapapi.search.geocode.GeoCoder;
import com.baidu.mapapi.search.geocode.ReverseGeoCodeOption;
import com.baidu.mapapi.search.poi.OnGetPoiSearchResultListener;
import com.baidu.mapapi.search.poi.PoiCitySearchOption;
import com.baidu.mapapi.search.poi.PoiDetailResult;
import com.baidu.mapapi.search.poi.PoiDetailSearchResult;
import com.baidu.mapapi.search.poi.PoiIndoorResult;
import com.baidu.mapapi.search.poi.PoiResult;
import com.baidu.mapapi.search.poi.PoiSearch;
import com.lljjcoder.style.citylist.CityListSelectActivity;
import com.lljjcoder.style.citylist.bean.CityInfoBean;
import com.virjar.ratel.virtuallocation.R;
import java.util.ArrayList;
import top.littlerich.virtuallocation.adapter.PoiAdapter;
import top.littlerich.virtuallocation.base.BaseActivity;
import top.littlerich.virtuallocation.common.AppApplication;
import top.littlerich.virtuallocation.listener.AsyncLocationResultListener;
......@@ -71,7 +93,7 @@ public class MainActivity extends BaseActivity implements View.OnClickListener {
private MapView mMapView;
private static BaiduMap mBaiduMap;
// 初始化全局 bitmap 信息,不用时及时 recycle
private BitmapDescriptor bd =null;//= BitmapDescriptorFactory.fromResource(R.mipmap.icon_gcoding);
private BitmapDescriptor bd = null;//= BitmapDescriptorFactory.fromResource(R.mipmap.icon_gcoding);
private static Marker mMarker;
private static LatLng curLatlng;
private static GeoCoder mSearch;
......@@ -84,6 +106,17 @@ public class MainActivity extends BaseActivity implements View.OnClickListener {
private TextView mAddProcess;
private ImageView mStopMock;
private LinearLayout poiSearchContainer;
private Button poiSearchCancelBtn;
//private ImageView poiSearchCancelImage;
private EditText poiSearchEditText;
private static PoiSearch mPoiSearch;
private Button poiSearchChangeCityBtn;
private TextView poiSearchCityTextView;
private RecyclerView mRecyclerView;
private LinearLayoutManager mLayoutManager;
private PoiAdapter mPoiAdapter;
@Override
protected Object getContentViewId() {
return R.layout.layout_schema;
......@@ -148,6 +181,31 @@ public class MainActivity extends BaseActivity implements View.OnClickListener {
mMapView.removeViewAt(1);
// 定位初始化
mLocClient = new LocationClient(this);
poiSearchContainer = findViewById(R.id.poi_search);
poiSearchCancelBtn = findViewById(R.id.poi_search_btn_cancel);
poiSearchEditText = findViewById(R.id.poi_search_edit);
poiSearchChangeCityBtn = findViewById(R.id.poi_search_change_city_btn);
poiSearchCityTextView = findViewById(R.id.poi_search_city);
//poiSearchCancelImage = findViewById(R.id.poi_search_img_cancel);
//创建默认的线性LayoutManager
mRecyclerView = findViewById(R.id.poi_search_recycler_view);
mLayoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(mLayoutManager);
//如果可以确定每个item的高度是固定的,设置这个选项可以提高性能
mRecyclerView.setHasFixedSize(true);
//创建并设置Adapter
mPoiAdapter = new PoiAdapter(new PoiAdapter.PoiClickListener() {
@Override
public void onPoiClick(PoiInfo poiInfo) {
poiSearchContainer.setVisibility(View.GONE);
setCurrentMapLatLng(poiInfo.location);
}
});
mRecyclerView.setAdapter(mPoiAdapter);
}
@Override
......@@ -173,6 +231,9 @@ public class MainActivity extends BaseActivity implements View.OnClickListener {
@Override
public void rightClick(View v) {
//mSearch.geocode()
// mSearch.geocode()
poiSearchContainer.setVisibility(View.VISIBLE);
poiSearchEditText.requestFocus();
}
});
mAboutAuthor.setOnClickListener(new View.OnClickListener() {
......@@ -222,8 +283,72 @@ public class MainActivity extends BaseActivity implements View.OnClickListener {
}
});
View.OnClickListener cancelPoiSearch = new View.OnClickListener() {
@Override
public void onClick(View view) {
poiSearchContainer.setVisibility(View.GONE);
}
};
poiSearchCancelBtn.setOnClickListener(cancelPoiSearch);
// poiSearchCancelImage.setOnClickListener(cancelPoiSearch);
poiSearchEditText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
beginSearch(editable);
}
});
mPoiSearch = PoiSearch.newInstance();
mPoiSearch.setOnGetPoiSearchResultListener(new OnGetPoiSearchResultListener() {
@Override
public void onGetPoiResult(PoiResult poiResult) {
if (poiResult.error != SearchResult.ERRORNO.NO_ERROR) {
Toast.makeText(MainActivity.this, "无结果:" + poiResult.error, Toast.LENGTH_SHORT).show();
return;
}
mPoiAdapter.setData(poiResult.getAllPoi());
}
@Override
public void onGetPoiDetailResult(PoiDetailResult poiDetailResult) {
}
@Override
public void onGetPoiDetailResult(PoiDetailSearchResult poiDetailSearchResult) {
}
@Override
public void onGetPoiIndoorResult(PoiIndoorResult poiIndoorResult) {
}
});
poiSearchChangeCityBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this, CityListSelectActivity.class);
startActivityForResult(intent, CityListSelectActivity.CITY_SELECT_RESULT_FRAG);
}
});
}
@Override
protected void IniData() {
iniMap();
......@@ -231,7 +356,6 @@ public class MainActivity extends BaseActivity implements View.OnClickListener {
mCurrentLocation.startAnimation(mOperatingAnim);
}
}
......@@ -385,4 +509,37 @@ public class MainActivity extends BaseActivity implements View.OnClickListener {
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == CityListSelectActivity.CITY_SELECT_RESULT_FRAG) {
if (resultCode == RESULT_OK) {
if (data == null) {
return;
}
Bundle bundle = data.getExtras();
CityInfoBean cityInfoBean = (CityInfoBean) bundle.getParcelable("cityinfo");
if (null == cityInfoBean) {
return;
}
poiSearchCityTextView.setText(cityInfoBean.getName());
beginSearch(poiSearchEditText.getText());
}
}
}
private void beginSearch(Editable editable) {
String keywords = editable.toString();
if (TextUtils.isEmpty(keywords)) {
mPoiAdapter.setData(new ArrayList<PoiInfo>());
//Toast.makeText(MainActivity.this, "请输入关键词", Toast.LENGTH_SHORT).show();
return;
}
mPoiSearch.searchInCity(new PoiCitySearchOption().city(poiSearchCityTextView.getText().toString())
.keyword(editable.toString())
);
}
}
\ No newline at end of file
......@@ -159,6 +159,7 @@ public class PreciseLocationActivity extends AppCompatActivity {
mBeginLocation.setVisibility(View.GONE);
mPbLocating.setVisibility(View.VISIBLE);
progressAnimator(mPbLocating);
}
@Override
......
package top.littlerich.virtuallocation.adapter;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.baidu.mapapi.model.LatLng;
import com.baidu.mapapi.search.core.PoiInfo;
import com.virjar.ratel.virtuallocation.R;
import java.util.ArrayList;
import java.util.List;
public class PoiAdapter extends RecyclerView.Adapter<PoiAdapter.ViewHolder> {
List<PoiInfo> mListData = new ArrayList<PoiInfo>();
private PoiClickListener poiClickListener;
public PoiAdapter(PoiClickListener poiClickListener) {
this.poiClickListener = poiClickListener;
}
public interface PoiClickListener {
void onPoiClick(PoiInfo poiInfo);
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int i) {
final View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_poi_info, parent, false);
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Object tag = view.getTag();
if (tag instanceof PoiInfo) {
poiClickListener.onPoiClick((PoiInfo) tag);
}
}
});
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
PoiInfo myAppInfo = mListData.get(position);
holder.tx_name.setText(myAppInfo.name);
holder.tx_addr.setText(myAppInfo.getAddress());
LatLng location = myAppInfo.getLocation();
String latLngStr = location.latitude + "," + location.longitude;
holder.tx_lat_lng.setText(latLngStr);
holder.myPoiInfo = myAppInfo;
holder.itemView.setTag(myAppInfo);
}
@Override
public int getItemCount() {
return mListData != null ? mListData.size() : 0;
}
public void setData(List<PoiInfo> myAppInfos) {
this.mListData = myAppInfos;
notifyDataSetChanged();
}
public static class ViewHolder extends RecyclerView.ViewHolder {
TextView tx_name;
TextView tx_addr;
TextView tx_lat_lng;
PoiInfo myPoiInfo;
public ViewHolder(View itemView) {
super(itemView);
tx_name = itemView.findViewById(R.id.tv_poi_name);
tx_addr = itemView.findViewById(R.id.tv_poi_addr);
tx_lat_lng = itemView.findViewById(R.id.tv_poi_latlng);
}
}
}
......@@ -12,6 +12,7 @@ import android.util.Log;
import com.baidu.mapapi.CoordType;
import com.baidu.mapapi.SDKInitializer;
import com.lljjcoder.style.citylist.utils.CityListLoader;
import org.json.JSONObject;
......@@ -53,6 +54,10 @@ public class AppApplication extends Application {
SDKInitializer.setCoordType(CoordType.GCJ02);
}
/**
* 预先加载一级列表显示 全国所有城市市的数据
*/
CityListLoader.getInstance().loadCityData(this);
}
......
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:custom="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
xmlns:custom="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.baidu.mapapi.map.MapView
android:id="@+id/bmapView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true"/>
android:clickable="true" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>
android:orientation="vertical">
<android.support.v7.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
custom:cardElevation="8dp"
>
custom:cardElevation="8dp">
<top.littlerich.virtuallocation.view.TopBanner
android:id="@+id/topbanner"
......@@ -33,7 +31,7 @@
custom:leftButtonWidth="20dp"
custom:rightButtonBackground="@mipmap/ic_topbar_search"
custom:titleText="@string/app_name"
custom:titleTextColors="#c1030303"/>
custom:titleTextColors="#c1030303" />
</android.support.v7.widget.CardView>
......@@ -46,13 +44,12 @@
android:drawableLeft="@mipmap/ic_virtual_addr"
android:drawablePadding="7dp"
android:gravity="center_vertical"
android:paddingBottom="10dp"
android:paddingLeft="15dp"
android:paddingRight="15dp"
android:paddingTop="10dp"
android:paddingRight="15dp"
android:paddingBottom="10dp"
android:text="伪造地址"
android:textColor="#ff665e"
/>
android:textColor="#ff665e" />
</LinearLayout>
......@@ -64,43 +61,41 @@
android:background="@drawable/bg_botton_shadow"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingBottom="25dp"
android:paddingLeft="20dp"
android:paddingRight="20dp"
>
android:paddingBottom="25dp">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginTop="13dp"
>
android:orientation="vertical">
<ImageView
android:id="@+id/iv_location"
android:layout_width="50dp"
android:layout_height="50dp"
android:background="@drawable/bg_with_round"
android:padding="10dp"
android:src="@mipmap/ic_current_location"
/>
android:src="@mipmap/ic_current_location" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="定位"
android:layout_margin="4dp"
android:layout_gravity="center_horizontal"
android:textSize="13sp"
android:layout_margin="4dp"
android:text="定位"
android:textColor="#423f24"
/>
android:textSize="13sp" />
</LinearLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
>
android:gravity="center">
<Button
android:id="@+id/bt_Ok"
android:layout_width="100dp"
......@@ -109,17 +104,16 @@
android:layout_margin="10dp"
android:background="@drawable/bg_begin_location"
android:text="立即穿越"
android:textColor="#fbd12d"
/>
android:textColor="#fbd12d" />
</RelativeLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginTop="13dp"
>
android:orientation="vertical">
<ImageView
android:id="@+id/iv_stop_location"
android:layout_width="50dp"
......@@ -127,17 +121,16 @@
android:background="@drawable/bg_with_round"
android:clickable="true"
android:padding="10dp"
android:src="@mipmap/ic_stop_location"
/>
android:src="@mipmap/ic_stop_location" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="重置"
android:layout_margin="4dp"
android:layout_gravity="center_horizontal"
android:textSize="13sp"
android:layout_margin="4dp"
android:text="重置"
android:textColor="#423f24"
/>
android:textSize="13sp" />
</LinearLayout>
</LinearLayout>
......@@ -145,7 +138,12 @@
android:layout_width="250dp"
android:layout_height="250dp"
android:layout_gravity="center"
android:layout_margin="15dp"
/>
android:layout_margin="15dp" />
<include
android:id="@+id/poi_search"
layout="@layout/poi_search"
android:visibility="gone" />
</FrameLayout>
\ No newline at end of file
<?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="wrap_content"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#cccaca" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="80dp">
<ImageView
android:id="@+id/iv_app_icon"
android:layout_width="35dp"
android:layout_height="35dp"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:layout_marginLeft="10dp"
android:src="@mipmap/ic_current_location" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="12dp"
android:layout_marginRight="12dp"
android:layout_toRightOf="@id/iv_app_icon"
android:orientation="vertical">
<TextView
android:id="@+id/tv_poi_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:text="@string/poi_sample_name"
android:textSize="18sp" />
<TextView
android:id="@+id/tv_poi_addr"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:singleLine="true"
android:text="@string/poi_sample_addr" />
<TextView
android:id="@+id/tv_poi_latlng"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:singleLine="true"
android:text="@string/poi_sample_latlng"
android:textSize="12sp" />
</LinearLayout>
</RelativeLayout>
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:custom="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#DDFFFFFF"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="50dp"
android:orientation="horizontal">
<Button
android:id="@+id/poi_search_change_city_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#FF9999"
android:padding="10dp"
android:text="城市(点我修改):"
android:textSize="18dp" />
<TextView
android:id="@+id/poi_search_city"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
android:text="北京"
android:textSize="24dp" />
</LinearLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:id="@+id/poi_search_btn_cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:text="取消" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toStartOf="@id/poi_search_btn_cancel"
android:orientation="horizontal">
<TextView
android:id="@+id/poi_search_lab_key"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="关键词" />
<EditText
android:id="@+id/poi_search_edit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:autofillHints="请输入关键词"
android:inputType="text"
android:labelFor="@id/poi_search_lab_key" />
</LinearLayout>
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.RecyclerView
android:id="@+id/poi_search_recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical" />
<ProgressBar
android:id="@+id/pid_search_pb_progressbar"
android:layout_width="65dp"
android:layout_height="65dp"
android:layout_centerInParent="true"
android:indeterminateDrawable="@drawable/bg_progressbar"
android:visibility="gone" />
/>
</RelativeLayout>
</LinearLayout>
\ No newline at end of file
......@@ -3,4 +3,7 @@
<string name="app_introduce"> 筋斗云是一款虚拟定位软件,让你随心所欲的改变手机地理位置!本项目改造自:https://github.com/littleRich/VirtualLocation </string>
<string name="app_version_copyright">当前版本:1.0.0(build 20200827) \n@2017 ratel.virjar.com All right reserved</string>
<string name="item_application_name">应用程序名</string>
<string name="poi_sample_name">中国石化加油站(建材城西路站)</string>
<string name="poi_sample_addr">北京市海淀区建材城西路2号</string>
<string name="poi_sample_latlng">40.06174453910131,116.36035663970246</string>
</resources>
......@@ -45,6 +45,7 @@ allprojects {
name "aliyunGoogle"
url "https://maven.aliyun.com/repository/google"
}
maven { url "https://jitpack.io" }
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment