Skip to content

Commit 0703d5a

Browse files
committed
增加隐私政策、增加友盟SDK的使用,对错误信息进行上传。
1 parent c2e4da9 commit 0703d5a

File tree

16 files changed

+427
-34
lines changed

16 files changed

+427
-34
lines changed

.idea/jarRepositories.xml

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

README.md

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515

1616
## APP功能描述
1717

18-
  15天天气预报、空气质量、生活建议、出行建议、灾害预警、分钟级降水、城市切换、城市搜索、常用城市、世界国家/地区的城市、壁纸切换、壁纸下载、地图天气、地图搜索定位、每日提醒、语音播报、语音搜索、快捷切换常用城市、应用自动更新
18+
  15天天气预报、空气质量、生活建议、出行建议、灾害预警、分钟级降水、城市切换、城市搜索、常用城市、世界国家/地区的城市、壁纸切换、壁纸下载、地图天气、地图搜索定位、每日提醒、语音播报、语音搜索、快捷切换常用城市、应用自动更新、错误监控
1919

2020

2121
## 运行效果图
@@ -89,7 +89,7 @@ GIF看不了的,打开下面的视频地址进行观看<br>
8989
[Android 天气APP(三十二)快捷切换常用城市](https://blog.csdn.net/qq_38436214/article/details/113498027)<br>
9090
[Android 天气APP(三十三)语音播报](https://blog.csdn.net/qq_38436214/article/details/113544891)<br>
9191
[Android 天气APP(三十四)语音搜索](https://blog.csdn.net/qq_38436214/article/details/113699279)<br>
92-
92+
[Android 天气APP(三十五)修复BUG、升级网络请求框架](https://blog.csdn.net/qq_38436214/article/details/119295627?spm=1001.2014.3001.5501)<br>
9393

9494
文章代码是一篇一篇进行迭代的,也欢迎读者提供新的需求,适当采纳,更好的优化这个项目<br>
9595

@@ -98,8 +98,11 @@ GIF看不了的,打开下面的视频地址进行观看<br>
9898
博主:[初学者-Study](https://blog.csdn.net/qq_38436214)<br>
9999

100100
## 版本说明
101-
102-
### V 2.6 (最新版本)
101+
### V 2.8 (最新版本)
102+
* 增加友盟+性能监控SDK<br>
103+
### V 2.7
104+
* 修复UI显示问题、资源图片处理、优化网络请求框架<br>
105+
### V 2.6
103106
* 优化用户体验,新增快捷切换城市、语音播报、语音搜索功能<br>
104107
### V 2.5
105108
* 分钟级降水、每日提醒<br>

app/build.gradle

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ android {
88
minSdkVersion 21
99
targetSdkVersion 28
1010
versionCode 1
11-
versionName "2.7"
11+
versionName "2.8"
1212
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
1313
}
1414

@@ -44,17 +44,21 @@ android {
4444

4545
dependencies {
4646
implementation fileTree(dir: 'libs', include: ['*.jar'])
47-
implementation 'androidx.appcompat:appcompat:1.2.0'
48-
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
49-
testImplementation 'junit:junit:4.12'
50-
androidTestImplementation 'androidx.test:runner:1.2.0'
51-
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
47+
implementation 'androidx.appcompat:appcompat:1.3.0'
48+
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
49+
implementation 'com.google.android.material:material:1.2.1'
50+
testImplementation 'junit:junit:4.13.2'
51+
androidTestImplementation 'androidx.test:runner:1.3.0'
52+
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
5253

5354
//butterknife 这个部分比较特殊,所以不管是模块还是项目里都要引入依赖,否则你的控件会报空对象
54-
implementation 'com.jakewharton:butterknife:10.1.0'
55-
annotationProcessor 'com.jakewharton:butterknife-compiler:10.1.0'
55+
implementation 'com.jakewharton:butterknife:10.2.1'
56+
annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.0'
5657
implementation project(':mvplibrary')//引入模块 然后将项目里的依赖移动到模块的build.gradle里
57-
58-
implementation 'com.tencent.bugly:crashreport:latest.release'
59-
//其中latest.release指代最新Bugly SDK版本号,也可以指定明确的版本号,例如2.2.0
58+
//Bugly SDK
59+
implementation 'com.tencent.bugly:crashreport:3.4.4'
60+
// 友盟基础组件库(所有友盟业务SDK都依赖基础组件库)
61+
implementation "com.umeng.umsdk:common:9.4.2" //(必选)
62+
implementation "com.umeng.umsdk:asms:1.4.1" // asms包依赖(必选)
63+
implementation "com.umeng.umsdk:apm:1.4.2" // U-APM包依赖(必选)
6064
}

app/src/main/AndroidManifest.xml

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,13 @@
99
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- 获取运营商信息,用于支持提供运营商信息相关的接口 -->
1010
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位 -->
1111
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
12+
<uses-permission android:name="android.permission.READ_PHONE_STATE"/><!--获取手机状态-->
1213
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据 -->
1314
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <!-- 读取扩展存储 -->
14-
<uses-permission android:name="android.permission.INTERNET" /><!--网络访问-->
15-
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" /><!--应用安装-->
16-
<uses-permission android:name="android.permission.RECORD_AUDIO" /><!--录音-->
15+
<uses-permission android:name="android.permission.INTERNET" /> <!-- 网络访问 -->
16+
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" /> <!-- 应用安装 -->
17+
<uses-permission android:name="android.permission.RECORD_AUDIO" />
18+
1719

1820
<application
1921
android:name=".WeatherApplication"
@@ -26,7 +28,8 @@
2628
android:supportsRtl="true"
2729
android:theme="@style/AppTheme"
2830
tools:ignore="GoogleAppIndexingWarning">
29-
<activity android:name=".ui.SettingActivity"></activity>
31+
<activity android:name=".ui.PrivacyPolicyActivity"></activity>
32+
<activity android:name=".ui.SettingActivity" />
3033
<activity android:name=".ui.WebActivity" />
3134
<activity android:name=".ui.WorldCityListActivity" />
3235
<activity android:name=".ui.ImageActivity" />
@@ -53,26 +56,22 @@
5356
<activity android:name=".MainActivity" />
5457
<activity android:name=".ui.CommonlyUsedCityActivity" />
5558
<activity android:name=".ui.WorldCityWeatherActivity" />
56-
<activity android:name=".ui.SearchCityActivity" />
57-
58-
<!-- 百度定位AK -->
59+
<activity android:name=".ui.SearchCityActivity" /> <!-- 百度定位AK -->
5960
<meta-data
6061
android:name="com.baidu.lbsapi.API_KEY"
6162
android:value="Fh0NIFb6Tg8f7altVIpdGoDH0BR2myG4" /> <!-- 百度定位服务 -->
6263
<service
6364
android:name="com.baidu.location.f"
6465
android:enabled="true"
65-
android:process=":remote" />
66-
<!-- 下载APK广播 -->
66+
android:process=":remote" /> <!-- 下载APK广播 -->
6767
<receiver
6868
android:name=".receiver.DownloadApkReceiver"
6969
android:enabled="true"
7070
android:exported="true">
7171
<intent-filter>
7272
<action android:name="android.intent.action.DOWNLOAD_COMPLETE" />
7373
</intent-filter>
74-
</receiver>
75-
<!-- Android7.0以后读取文件需要配置Provider -->
74+
</receiver> <!-- Android7.0以后读取文件需要配置Provider -->
7675
<provider
7776
android:name="androidx.core.content.FileProvider"
7877
android:authorities="com.llw.goodweather.fileprovider"

app/src/main/java/com/llw/goodweather/WeatherApplication.java

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,20 @@
44
import android.app.Dialog;
55
import android.content.Context;
66
import android.content.res.Configuration;
7+
import android.os.Build;
78
import android.os.Bundle;
89
import android.os.Handler;
910

1011
import com.baidu.mapapi.CoordType;
1112
import com.baidu.mapapi.SDKInitializer;
1213
import com.iflytek.cloud.SpeechConstant;
1314
import com.iflytek.cloud.SpeechUtility;
15+
import com.llw.goodweather.utils.APKVersionInfoUtils;
16+
import com.llw.goodweather.utils.Constant;
1417
import com.llw.goodweather.utils.GlideUtil;
18+
import com.llw.goodweather.utils.SPUtils;
1519
import com.llw.mvplibrary.BaseApplication;
20+
import com.llw.mvplibrary.bean.AppVersion;
1621
import com.llw.mvplibrary.newnet.NetworkApi;
1722
import com.llw.mvplibrary.utils.ActivityManager;
1823
import com.scwang.smartrefresh.layout.SmartRefreshLayout;
@@ -24,6 +29,10 @@
2429
import com.scwang.smartrefresh.layout.footer.ClassicsFooter;
2530
import com.scwang.smartrefresh.layout.header.ClassicsHeader;
2631
import com.tencent.bugly.crashreport.CrashReport;
32+
import com.uc.crashsdk.export.CrashApi;
33+
import com.umeng.commonsdk.UMConfigure;
34+
import com.umeng.umcrash.UMCrash;
35+
import com.umeng.umcrash.UMCrashCallback;
2736

2837
import org.litepal.LitePal;
2938

@@ -119,6 +128,41 @@ public void onActivityDestroyed(Activity activity) {
119128
CrashReport.initCrashReport(getApplicationContext(), "d3637c0f25", true);
120129
//配置讯飞语音SDK
121130
SpeechUtility.createUtility(this, SpeechConstant.APPID +"=6018c2cb");
131+
132+
//用户是否同意隐私政策
133+
boolean isAgree = SPUtils.getBoolean(Constant.AGREE, false,context);
134+
if (isAgree) {
135+
//友盟SDK初始化
136+
UMConfigure.init(this, Constant.U_MENG_APPKEY, "Umeng", UMConfigure.DEVICE_TYPE_PHONE, "");
137+
} else {
138+
//预初始化
139+
UMConfigure.preInit(this, Constant.U_MENG_APPKEY,"Umeng");
140+
}
141+
//友盟配置
142+
umengConfig();
143+
}
144+
145+
/**
146+
* 友盟配置
147+
*/
148+
private void umengConfig() {
149+
//设置App版本
150+
UMCrash.setAppVersion(
151+
APKVersionInfoUtils.getVerName(this),
152+
APKVersionInfoUtils.getSubVersion(this), Build.ID);
153+
154+
//针对于Native崩溃信息采集
155+
// final Bundle customInfo = new Bundle();
156+
// customInfo.putBoolean("mCallNativeDefaultHandler",true);
157+
// CrashApi.getInstance().updateCustomInfo(customInfo);
158+
159+
//崩溃回调
160+
UMCrash.registerUMCrashCallback(new UMCrashCallback(){
161+
@Override
162+
public String onCallback(){
163+
return "App程序崩溃了";
164+
}
165+
});
122166
}
123167

124168

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
package com.llw.goodweather.ui;
2+
3+
import androidx.appcompat.app.AppCompatActivity;
4+
import androidx.appcompat.widget.Toolbar;
5+
6+
import android.graphics.Bitmap;
7+
import android.os.Bundle;
8+
import android.util.Log;
9+
import android.webkit.WebChromeClient;
10+
import android.webkit.WebSettings;
11+
import android.webkit.WebView;
12+
import android.webkit.WebViewClient;
13+
14+
import com.llw.goodweather.R;
15+
import com.llw.mvplibrary.base.BaseActivity;
16+
17+
/**
18+
* 隐私页面页面
19+
* @author lonel
20+
*/
21+
public class PrivacyPolicyActivity extends BaseActivity {
22+
private WebView webView;
23+
@Override
24+
public void initData(Bundle savedInstanceState) {
25+
Toolbar toolbar = findViewById(R.id.toolbar);
26+
toolbar.setNavigationOnClickListener(v -> finish());
27+
webView = findViewById(R.id.webview);
28+
29+
loadUrl("https://www.umeng.com/page/policy");
30+
}
31+
32+
@Override
33+
public int getLayoutId() {
34+
return R.layout.activity_privacy_policy;
35+
}
36+
37+
/**
38+
* 加载网页Url
39+
*
40+
* @param url
41+
*/
42+
private void loadUrl(String url) {
43+
if (url == null) {
44+
return;
45+
}
46+
47+
WebSettings webSetting = webView.getSettings();
48+
//设置JS允许
49+
webSetting.setJavaScriptEnabled(true);
50+
//设置WebView是否使用viewport
51+
webSetting.setUseWideViewPort(true);
52+
//设置WebView是否使用预览模式加载界面。
53+
webSetting.setLoadWithOverviewMode(true);
54+
//设置WebView是否支持使用屏幕控件或手势进行缩放
55+
webSetting.setSupportZoom(true);
56+
//设置WebView是否使用其内置的变焦机制,该机制集合屏幕缩放控件使用
57+
webSetting.setBuiltInZoomControls(true);
58+
webSetting.setJavaScriptCanOpenWindowsAutomatically(true);
59+
webSetting.setAllowFileAccess(true);
60+
webSetting.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);
61+
webSetting.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NORMAL);
62+
webSetting.setUseWideViewPort(true);
63+
webSetting.setLoadWithOverviewMode(true);
64+
webSetting.setSupportMultipleWindows(true);
65+
webSetting.setAppCacheEnabled(true);//APP缓存
66+
webSetting.setDomStorageEnabled(true);
67+
webSetting.setGeolocationEnabled(true);//地理位置
68+
webSetting.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);//读取缓存
69+
70+
webView.loadUrl(url);
71+
72+
webView.setWebViewClient(new WebViewClient() {
73+
74+
@Override
75+
public void onPageStarted(WebView view, String url, Bitmap favicon) {
76+
super.onPageStarted(view, url, favicon);
77+
Log.d("webViewT", "加载开始");
78+
}
79+
80+
@Override
81+
public void onPageFinished(WebView view, String url) {
82+
super.onPageFinished(view, url);
83+
Log.d("webViewT", "加载完成");
84+
}
85+
86+
});
87+
88+
//进度
89+
webView.setWebChromeClient(new WebChromeClient() {
90+
@Override
91+
public void onProgressChanged(WebView webView, int newProgress) {
92+
super.onProgressChanged(webView, newProgress);
93+
Log.d("webViewT", "newProgress: " + newProgress);
94+
}
95+
});
96+
}
97+
}

0 commit comments

Comments
 (0)