http://www.eoeandroid.com/thread-309340-1-1.html
友盟统计分析是移动终端上不可多得的佳品,鉴于在开发中使用到,随笔写下使用过程。
友盟SDK下载(包含统计功能和自动更新功能):
第一步:导入SDK
1. 解压文件,libs 文件夹内的文件直接复制到eclipse工程同名文件夹内;
2. 将 res 内所有文件复制到eclipse工程内,合并res资源,所有资源前缀均为 umeng_ 。
第二步:添加权限及相关信息
1. 使用统计功能添加如下权限:
1 | < uses-permission android:name = "android.permission.ACCESS_NETWORK_STATE" ></ uses-permission > |
2 | < uses-permission android:name = "android.permission.INTERNET" ></ uses-permission > |
3 | < uses-permission android:name = "android.permission.READ_PHONE_STATE" ></ uses-permission > |
4 | < uses-permission android:name = "android.permission.READ_LOGS" /> <!-- 用于读取日志信息 --> |
2. 使用统计功能添加如下信息:
1 | < application >...... |
2 | < meta-data android:value = "MyAppKey" android:name = "UMENG_APPKEY" /> |
3 | < meta-data android:value = "eoeAndroid" android:name = "UMENG_CHANNEL" /> |
4 | ......</ application > |
提示: UMENG_APPKEY 的值可在友盟添加App获取; UMENG_CHANNEL 是市场的渠道号,用于统计用户通过哪个市场下载应用,可通过友盟提供的渠道号填写。
第三步:开始使用统计功能
1. 鉴于程序内可能有多个Activity,在此建议新建一个 基类 ,让所有Activity继承这个类,增加代码的可重用性:
01 | public class BaseActivity extends Activity { |
02 |
03 | @Override |
04 | protected void onCreate(Bundle savedInstanceState) { |
05 | super .onCreate(savedInstanceState); |
06 | MobclickAgent.onError( this ); //捕捉未捕捉异常,通过调用这个方法,可以收集引起程序异常退出的错误信息,如不用可注释 |
07 | } |
08 | /** 在重载函数中为统计代码 **/ |
09 | @Override |
10 | protected void onPause() { |
11 | super .onPause(); |
12 | MobclickAgent.onPause( this ); |
13 | } |
14 |
15 | @Override |
16 | protected void onResume() { |
17 | super .onResume(); |
18 | MobclickAgent.onResume( this ); |
19 | } |
2. 定义好基类后,在以后生成新 Activity 过程中,可直接 继承 基类:
1 | public class MyActivity extends BaseActivity { |
2 |
3 | @Override |
4 | protected void onCreate(Bundle savedInstanceState) { |
5 | super .onCreate(savedInstanceState); |
6 | setContentView(R.layout.activity_splash); |
7 | } |
8 |
9 | } |
第四步:使用自动更新功能
1. 使用自动更新功能添加如下权限:
1 | < uses-permission android:name = "android.permission.WRITE_EXTERNAL_STORAGE" ></ uses-permission > |
2. 使用自动更新 添加如下 信息 :
1 | < service android:name = "com.umeng.common.net.DownloadingService" |
2 | android:process = ":DownloadingService" > |
3 | </ service > |
3. 开始调用更新函数,详细信息可见注释:
01 | public class UpdateActivity extends BaseActivity { |
02 | /** 用户手动检测更新交互按钮 **/ |
03 | private Button btnChecknew; |
04 | |
05 | private Context mContext = this ; |
06 |
07 | @Override |
08 | protected void onCreate(Bundle savedInstanceState) { |
09 | super .onCreate(savedInstanceState); |
10 | setContentView(R.layout.activity_update); |
11 | initview(); |
12 | /** 开始调用自动更新函数 **/ |
13 | UmengUpdateAgent.update( this ); //从服务器获取更新信息 |
14 | UmengUpdateAgent.setUpdateOnlyWifi( false ); //是否在只在wifi下提示更新,默认为 true |
15 | UmengUpdateAgent.setUpdateAutoPopup( true ); //是否自动弹出更新对话框 |
16 | UmengUpdateAgent.setDownloadListener( null ); //下载新版本过程事件监听,可设为 null |
17 | UmengUpdateAgent.setDialogListener( null ); //用户点击更新对话框按钮的回调事件,直接 null |
18 | //从服务器获取更新信息的回调函数 |
19 | UmengUpdateAgent.setUpdateListener( new UmengUpdateListener() { |
20 | @Override |
21 | public void onUpdateReturned( int updateStatus,UpdateResponse updateInfo) { |
22 | switch (updateStatus) { |
23 | case 0 : // 有更新 |
24 | UmengUpdateAgent.showUpdateDialog(mContext, updateInfo); |
25 | break ; |
26 | case 1 : // 无更新 |
27 | OnNotice( "当前已是最新版." ); |
28 | break ; |
29 | case 2 : // 如果设置为wifi下更新且wifi无法打开时调用 |
30 | break ; |
31 | case 3 : // 连接超时 |
32 | OnNotice( "连接超时,请稍候重试" ); |
33 | break ; |
34 | } |
35 | } |
36 | }); |
37 | } |
38 | private void initview() { |
39 | btnChecknew = (Button) findViewById(R.id.wgupdate_btn_check_new); |
40 | btnChecknew.setOnClickListener( new View.OnClickListener() { |
41 | |
42 | @Override |
43 | public void onClick(View arg0) { |
44 | //UmengUpdateAgent.setUpdateAutoPopup(false); |
45 | UmengUpdateAgent.forceUpdate(mContext); //先前用户可能忽略更新,“强制”弹出更新对话款 |
46 | } |
47 | }); |
48 | |
49 | } |
50 | |
51 | } |