Compare commits

...

6 Commits

Author SHA1 Message Date
linruijn 5af166d3dd Merge branch 'dev' into lrj-local-dev 1 year ago
linruijn c05047e6ba 增加获取网络上的经纬度 1 year ago
linruijn 31c363934a Merge branch 'dev' into lrj-local-dev 1 year ago
linruijn ef4f35e890 Merge branch 'dev' into lrj-local-dev 1 year ago
linruijn 2d99749cea 增加忽略 1 year ago
linruijn 36ee5f1573 删除build 1 year ago
  1. 1
      .gitignore
  2. 22
      app/.gitignore
  3. 3
      app/build.gradle
  4. 11
      app/src/main/AndroidManifest.xml
  5. 178
      app/src/main/java/com/unionmed/unionmedtv/activity/MainActivity.java
  6. 161
      app/src/main/java/com/unionmed/unionmedtv/fragment/ContentFragment.java

1
.gitignore vendored

@ -12,3 +12,4 @@
/app/build/ /app/build/
/captures /captures
.externalNativeBuild .externalNativeBuild
/app/build/

22
app/.gitignore vendored

@ -8,4 +8,24 @@ local.properties
# 各个模块下build文件夹 # 各个模块下build文件夹
/app/build/ /app/build/
/build /build
*/build */build
# Gradle files
.gradle/
build/
# Built application files
*.apk
*.ap_
*.aab
# Files for the ART/Dalvik VM
*.dex
# Java class files
*.class
# Generated files
bin/
gen/
out/

@ -77,4 +77,7 @@ dependencies {
// //
implementation 'com.github.SilenceDut:jpinyin:v1.0' implementation 'com.github.SilenceDut:jpinyin:v1.0'
// https://github.com/getActivity/XXPermissions
implementation 'com.github.getActivity:XXPermissions:16.5'
} }

@ -10,6 +10,10 @@
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission <uses-permission
android:name="android.permission.READ_LOGS" android:name="android.permission.READ_LOGS"
tools:ignore="ProtectedPermissions" /> tools:ignore="ProtectedPermissions" />
@ -35,8 +39,15 @@
android:label="@string/app_name" android:label="@string/app_name"
android:supportsRtl="true" android:supportsRtl="true"
android:theme="@style/AppTheme" android:theme="@style/AppTheme"
android:usesCleartextTraffic="true"
android:requestLegacyExternalStorage="true"
tools:ignore="GoogleAppIndexingWarning" tools:ignore="GoogleAppIndexingWarning"
tools:replace="android:allowBackup"> tools:replace="android:allowBackup">
<!-- 告知 XXPermissions 当前项目已经适配了分区存储特性 -->
<meta-data
android:name="ScopedStorage"
android:value="true" />
<activity android:name="com.unionmed.unionmedtv.activity.VideoDetailActivity" /> <activity android:name="com.unionmed.unionmedtv.activity.VideoDetailActivity" />
<activity android:name="com.unionmed.unionmedtv.activity.VideoPlayActivity" /> <activity android:name="com.unionmed.unionmedtv.activity.VideoPlayActivity" />
<activity <activity

@ -1,13 +1,19 @@
package com.unionmed.unionmedtv.activity; package com.unionmed.unionmedtv.activity;
import android.Manifest;
import android.content.BroadcastReceiver; import android.content.BroadcastReceiver;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.IntentFilter; import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.graphics.Paint; import android.graphics.Paint;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.net.ConnectivityManager; import android.net.ConnectivityManager;
import android.net.NetworkInfo; import android.net.NetworkInfo;
import android.net.Uri; import android.net.Uri;
import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.os.Message; import android.os.Message;
@ -19,8 +25,11 @@ import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toast; import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.constraintlayout.widget.ConstraintLayout; import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.constraintlayout.widget.Group; import androidx.constraintlayout.widget.Group;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.leanback.widget.ArrayObjectAdapter; import androidx.leanback.widget.ArrayObjectAdapter;
import androidx.leanback.widget.FocusHighlight; import androidx.leanback.widget.FocusHighlight;
import androidx.leanback.widget.FocusHighlightHelper; import androidx.leanback.widget.FocusHighlightHelper;
@ -30,6 +39,9 @@ import androidx.leanback.widget.OnChildViewHolderSelectedListener;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import androidx.viewpager.widget.ViewPager; import androidx.viewpager.widget.ViewPager;
import com.hjq.permissions.OnPermissionCallback;
import com.hjq.permissions.Permission;
import com.hjq.permissions.XXPermissions;
import com.unionmed.unionmedtv.R; import com.unionmed.unionmedtv.R;
import com.unionmed.unionmedtv.adapter.ContentViewPagerAdapter; import com.unionmed.unionmedtv.adapter.ContentViewPagerAdapter;
import com.unionmed.unionmedtv.base.BaseActivity; import com.unionmed.unionmedtv.base.BaseActivity;
@ -198,6 +210,9 @@ public class MainActivity extends BaseActivity implements ContentFragment.OnFrag
} }
} }
public static final int LOCATION_CODE = 301;
private LocationManager locationManager;
private String locationProvider = null;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
@ -207,6 +222,36 @@ public class MainActivity extends BaseActivity implements ContentFragment.OnFrag
initData(); initData();
initListener(); initListener();
initBroadCast(); initBroadCast();
XXPermissions.with(this)
// 申请单个权限
.permission(Manifest.permission.WRITE_EXTERNAL_STORAGE, Permission.ACCESS_FINE_LOCATION, Permission.ACCESS_COARSE_LOCATION)
// 设置权限请求拦截器(局部设置)
//.interceptor(new PermissionInterceptor())
// 设置不触发错误检测机制(局部设置)
//.unchecked()
.request(new OnPermissionCallback() {
@Override
public void onGranted(@NonNull List<String> permissions, boolean all) {
if (!all) {
// toast("获取部分权限成功,但部分权限未正常授予");
return;
}
getLocation();
}
@Override
public void onDenied(@NonNull List<String> permissions, boolean never) {
if (never) {
// 如果是被永久拒绝就跳转到应用权限系统设置页面
XXPermissions.startPermissionActivity(MainActivity.this, permissions);
} else {
Toast.makeText(MainActivity.this, "位置权限获取失败", Toast.LENGTH_LONG).show();
}
}
});
} }
// private boolean isPressUpDownLeftRightBack = false; // private boolean isPressUpDownLeftRightBack = false;
@ -249,6 +294,11 @@ public class MainActivity extends BaseActivity implements ContentFragment.OnFrag
mThread.interrupt(); mThread.interrupt();
} }
unregisterReceiver(networkChangeReceiver); unregisterReceiver(networkChangeReceiver);
if (locationManager != null) {
// 关闭程序时将监听器移除
locationManager.removeUpdates(locationListener);
}
} }
private HorizontalGridView mHorizontalGridView;//导航栏Tab private HorizontalGridView mHorizontalGridView;//导航栏Tab
@ -444,6 +494,134 @@ public class MainActivity extends BaseActivity implements ContentFragment.OnFrag
} }
private void getLocation() {
//1.获取位置管理器
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
//2.获取位置提供器,GPS或是NetWork
List<String> providers = locationManager.getProviders(true);
if (providers.contains(LocationManager.NETWORK_PROVIDER)) {
//如果是Network
locationProvider = LocationManager.NETWORK_PROVIDER;
Log.v("TAG", "定位方式Network");
} else if (providers.contains(LocationManager.GPS_PROVIDER)) {
//如果是GPS
locationProvider = LocationManager.GPS_PROVIDER;
Log.v("TAG", "定位方式GPS");
} else {
Toast.makeText(this, "没有可用的位置提供器", Toast.LENGTH_LONG).show();
return;
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
//获取权限(如果没有开启权限,会弹出对话框,询问是否开启权限)
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED ||
ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)
!= PackageManager.PERMISSION_GRANTED) {
//请求权限
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION}, LOCATION_CODE);
} else {
//3.获取上次的位置,一般第一次运行,此值为null
Location location = null;
try {
location = locationManager.getLastKnownLocation(locationProvider);
} catch (Exception e) {
Log.v("TAG", "locationManager.getLastKnownLocation异常了" + e);
}
if (location != null) {
Toast.makeText(this, location.getLongitude() + " " +
location.getLatitude() + "", Toast.LENGTH_LONG).show();
Log.v("TAG", "获取上次的位置-经纬度:" + location.getLongitude() + " " + location.getLatitude());
// TODO 保存经纬度
} else {
//监视地理位置变化,第二个和第三个参数分别为更新的最短时间minTime和最短距离minDistace
locationManager.requestLocationUpdates(locationProvider, 3000, 1, locationListener);
}
}
} else {
Location location = locationManager.getLastKnownLocation(locationProvider);
if (location != null) {
Toast.makeText(this, location.getLongitude() + " " +
location.getLatitude() + "", Toast.LENGTH_LONG).show();
Log.v("TAG", "获取上次的位置-经纬度:" + location.getLongitude() + " " + location.getLatitude());
// TODO 保存经纬度
} else {
//监视地理位置变化,第二个和第三个参数分别为更新的最短时间minTime和最短距离minDistace
locationManager.requestLocationUpdates(locationProvider, 5000, 20, locationListener);
}
}
}
public LocationListener locationListener = new LocationListener() {
// Provider的状态在可用、暂时不可用和无服务三个状态直接切换时触发此函数
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
// Provider被enable时触发此函数,比如GPS被打开
@Override
public void onProviderEnabled(String provider) {
}
// Provider被disable时触发此函数,比如GPS被关闭
@Override
public void onProviderDisabled(String provider) {
}
//当坐标改变时触发此函数,如果Provider传进相同的坐标,它就不会被触发
@Override
public void onLocationChanged(Location location) {
if (location != null) {
//如果位置发生变化,重新显示地理位置经纬度
Toast.makeText(MainActivity.this, location.getLongitude() + " " +
location.getLatitude() + "", Toast.LENGTH_LONG).show();
Log.v("TAG", "监视地理位置变化-经纬度:" + location.getLongitude() + " " + location.getLatitude());
// TODO 保存经纬度
}
}
};
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case LOCATION_CODE:
if (grantResults.length > 0 && grantResults[0] == this.getPackageManager().PERMISSION_GRANTED
&& grantResults[1] == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(this, "申请定位权限", Toast.LENGTH_LONG).show();
try {
List<String> providers = locationManager.getProviders(true);
if (providers.contains(LocationManager.NETWORK_PROVIDER)) {
//如果是Network
locationProvider = LocationManager.NETWORK_PROVIDER;
} else if (providers.contains(LocationManager.GPS_PROVIDER)) {
//如果是GPS
locationProvider = LocationManager.GPS_PROVIDER;
}
Location location = locationManager.getLastKnownLocation(locationProvider);
if (location != null) {
// TODO 保存经纬度
Log.v("TAG", "获取上次的位置-经纬度:" + location.getLongitude() + " " + location.getLatitude());
} else {
// 监视地理位置变化,第二个和第三个参数分别为更新的最短时间minTime和最短距离minDistace
locationManager.requestLocationUpdates(locationProvider, 5000, 20, locationListener);
}
} catch (SecurityException e) {
e.printStackTrace();
}
} else {
Toast.makeText(this, "缺少定位权限", Toast.LENGTH_LONG).show();
}
break;
}
}
} }

@ -1,8 +1,16 @@
package com.unionmed.unionmedtv.fragment; package com.unionmed.unionmedtv.fragment;
import android.Manifest;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.content.Context; import android.content.Context;
import android.content.pm.PackageManager;
import android.location.Address;
import android.location.Geocoder;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.net.Uri; import android.net.Uri;
import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.os.Message; import android.os.Message;
@ -11,9 +19,12 @@ import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.ProgressBar; import android.widget.ProgressBar;
import android.widget.Toast;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentActivity;
import androidx.leanback.widget.ArrayObjectAdapter; import androidx.leanback.widget.ArrayObjectAdapter;
import androidx.leanback.widget.HeaderItem; import androidx.leanback.widget.HeaderItem;
@ -23,6 +34,8 @@ import androidx.leanback.widget.OnChildViewHolderSelectedListener;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide; import com.bumptech.glide.Glide;
import com.hjq.http.EasyHttp;
import com.hjq.http.listener.OnHttpListener;
import com.unionmed.unionmedtv.R; import com.unionmed.unionmedtv.R;
import com.unionmed.unionmedtv.activity.MainActivity; import com.unionmed.unionmedtv.activity.MainActivity;
import com.unionmed.unionmedtv.api.GetNearDoctorApi; import com.unionmed.unionmedtv.api.GetNearDoctorApi;
@ -44,10 +57,9 @@ import com.unionmed.unionmedtv.utils.Constants;
import com.unionmed.unionmedtv.utils.FontDisplayUtil; import com.unionmed.unionmedtv.utils.FontDisplayUtil;
import com.unionmed.unionmedtv.utils.LocalJsonResolutionUtil; import com.unionmed.unionmedtv.utils.LocalJsonResolutionUtil;
import com.unionmed.unionmedtv.widgets.TabVerticalGridView; import com.unionmed.unionmedtv.widgets.TabVerticalGridView;
import com.hjq.http.EasyHttp;
import com.hjq.http.listener.OnHttpListener;
import java.util.List; import java.util.List;
import java.util.Locale;
import me.jessyan.autosize.utils.LogUtils; import me.jessyan.autosize.utils.LogUtils;
@ -190,7 +202,7 @@ public class ContentFragment extends BaseLazyLoadFragment {
ItemBridgeAdapter itemBridgeAdapter = new ItemBridgeAdapter(mAdapter); ItemBridgeAdapter itemBridgeAdapter = new ItemBridgeAdapter(mAdapter);
mVerticalGridView.setAdapter(itemBridgeAdapter); mVerticalGridView.setAdapter(itemBridgeAdapter);
// getLocation();
} }
private void initListener() { private void initListener() {
@ -577,4 +589,147 @@ public class ContentFragment extends BaseLazyLoadFragment {
} }
} }
public static final int LOCATION_CODE = 301;
private LocationManager locationManager;
private String locationProvider = null;
private void getLocation(){
//1.获取位置管理器
locationManager = (LocationManager) mActivity.getSystemService(Context.LOCATION_SERVICE);
//2.获取位置提供器,GPS或是NetWork
List<String> providers = locationManager.getProviders(true);
// if (providers.contains(LocationManager.GPS_PROVIDER)) {
// //如果是GPS
// locationProvider = LocationManager.GPS_PROVIDER;
// Log.v("TAG", "定位方式GPS");
// } else
if (providers.contains(LocationManager.NETWORK_PROVIDER)) {
//如果是Network
locationProvider = LocationManager.NETWORK_PROVIDER;
Log.v("TAG", "定位方式Network");
}else {
Toast.makeText(mActivity, "没有可用的位置提供器", Toast.LENGTH_LONG).show();
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
//获取权限(如果没有开启权限,会弹出对话框,询问是否开启权限)
if (ContextCompat.checkSelfPermission(mActivity, Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED ||
ActivityCompat.checkSelfPermission(mActivity, Manifest.permission.ACCESS_COARSE_LOCATION)
!= PackageManager.PERMISSION_GRANTED) {
//请求权限
ActivityCompat.requestPermissions(mActivity, new String[]{Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION}, LOCATION_CODE);
} else {
//3.获取上次的位置,一般第一次运行,此值为null
Location location = locationManager.getLastKnownLocation(locationProvider);
if (location!=null){
Toast.makeText(mActivity, location.getLongitude() + " " +
location.getLatitude() + "",Toast.LENGTH_LONG).show();
Log.v("TAG", "获取上次的位置-经纬度:"+location.getLongitude()+" "+location.getLatitude());
getAddress(location);
}else{
//监视地理位置变化,第二个和第三个参数分别为更新的最短时间minTime和最短距离minDistace
locationManager.requestLocationUpdates(locationProvider, 3000, 1,locationListener);
}
}
} else {
Location location = locationManager.getLastKnownLocation(locationProvider);
if (location!=null){
Toast.makeText(mActivity, location.getLongitude() + " " +
location.getLatitude() + "", Toast.LENGTH_LONG).show();
Log.v("TAG", "获取上次的位置-经纬度:"+location.getLongitude()+" "+location.getLatitude());
getAddress(location);
}else{
//监视地理位置变化,第二个和第三个参数分别为更新的最短时间minTime和最短距离minDistace
locationManager.requestLocationUpdates(locationProvider, 3000, 1,locationListener);
}
}
}
public LocationListener locationListener = new LocationListener() {
// Provider的状态在可用、暂时不可用和无服务三个状态直接切换时触发此函数
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
// Provider被enable时触发此函数,比如GPS被打开
@Override
public void onProviderEnabled(String provider) {
}
// Provider被disable时触发此函数,比如GPS被关闭
@Override
public void onProviderDisabled(String provider) {
}
//当坐标改变时触发此函数,如果Provider传进相同的坐标,它就不会被触发
@Override
public void onLocationChanged(Location location) {
if (location != null) {
//如果位置发生变化,重新显示地理位置经纬度
Toast.makeText(mActivity, location.getLongitude() + " " +
location.getLatitude() + "", Toast.LENGTH_LONG).show();
Log.v("TAG", "监视地理位置变化-经纬度:"+location.getLongitude()+" "+location.getLatitude());
}
}
};
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case LOCATION_CODE:
if(grantResults.length > 0 && grantResults[0] == mActivity.getPackageManager().PERMISSION_GRANTED
&& grantResults[1] == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(mActivity, "申请权限", Toast.LENGTH_LONG).show();
try {
List<String> providers = locationManager.getProviders(true);
if (providers.contains(LocationManager.NETWORK_PROVIDER)) {
//如果是Network
locationProvider = LocationManager.NETWORK_PROVIDER;
}else if (providers.contains(LocationManager.GPS_PROVIDER)) {
//如果是GPS
locationProvider = LocationManager.GPS_PROVIDER;
}
Location location = locationManager.getLastKnownLocation(locationProvider);
if (location!=null){
Toast.makeText(mActivity, location.getLongitude() + " " +
location.getLatitude() + "", Toast.LENGTH_LONG).show();
Log.v("TAG", "获取上次的位置-经纬度:"+location.getLongitude()+" "+location.getLatitude());
}else{
// 监视地理位置变化,第二个和第三个参数分别为更新的最短时间minTime和最短距离minDistace
locationManager.requestLocationUpdates(locationProvider, 0, 0,locationListener);
}
}catch (SecurityException e){
e.printStackTrace();
}
} else {
Toast.makeText(mActivity, "缺少权限", Toast.LENGTH_LONG).show();
// finish();
}
break;
}
}
//获取地址信息:城市、街道等信息
private List<Address> getAddress(Location location) {
List<Address> result = null;
try {
if (location != null) {
Geocoder gc = new Geocoder(mActivity, Locale.getDefault());
result = gc.getFromLocation(location.getLatitude(),
location.getLongitude(), 1);
Toast.makeText(mActivity, "获取地址信息:"+result.toString(), Toast.LENGTH_LONG).show();
Log.v("TAG", "获取地址信息:"+result.toString());
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
} }

Loading…
Cancel
Save