友盟自动更新关闭了,公司不想自己做一个更新系统,各种精挑细选下,我选择了讯飞,并封装了一下
必需的,要申请个讯飞账号,创建个应用,开通自动更新服务,这些不详谈,以下记录如何使用
1:添加讯飞更新jar包,manifast文件添加以下代码
<!-- autoupdate start -->
<meta-data android:name="IFLYTEK_APPKEY" android:value="5786f55b"/>
<meta-data android:name="IFLYTEK_CHANNEL" android:value="pda"/>
<activity android:name="com.iflytek.autoupdate.IFlytekUpdateDialog"
android:configChanges="keyboard|keyboardHidden|orientation"
android:exported="true"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:windowSoftInputMode="stateAlwaysHidden"
></activity>
<service android:name="com.iflytek.autoupdate.IFlytekDownloadService"/>
<!-- autoupdate end -->
2:添加弹出框布局文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
style="?android:attr/progressBarStyleLarge"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#60000000"
>
<LinearLayout
android:layout_width="300dp"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_centerInParent="true"
>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#e9eaed"
android:padding="7dp"
>
<ImageView
android:id="@+id/update_image"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_centerVertical="true"
android:layout_marginLeft="5dp"
android:contentDescription="@string/app_name"
android:src="@drawable/more_about"
/>
<TextView
android:id="@+id/iflytek_update_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/update_image"
android:layout_centerVertical="true"
android:textAppearance="?android:attr/textAppearanceMediumInverse"
android:textColor="#494c53"
android:layout_marginLeft="10dp"
/>
</RelativeLayout>
<ScrollView
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:padding="10dp"
android:background="#FFFFFF"
>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:id="@+id/iflytek_update_content"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:layout_marginTop="10dp"
android:textAppearance="?android:attr/textAppearanceMedium"
android:focusable="true"
android:textColor="#62656d" />
</LinearLayout>
</ScrollView>
<!-- Ok & Cancel Buttom -->
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:background="#FFFFFF"
android:padding="10dp"
>
<LinearLayout
android:layout_height="fill_parent"
android:layout_width="0dp"
android:layout_weight="1"
android:background="#bebfc2"
android:layout_marginLeft="10dp"
android:layout_marginRight="7dp"
>
<RelativeLayout
android:id="@+id/ifltek_cancel"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:background="#FFFFFF"
android:layout_margin="0.5dp"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="取消"
android:textAppearance="?android:attr/textAppearanceMediumInverse"
android:textColor="#494c53"
android:paddingTop="5dp"
android:paddingBottom="5dp"
/>
</RelativeLayout>
</LinearLayout>
<LinearLayout
android:layout_height="fill_parent"
android:layout_width="0dp"
android:layout_weight="1"
android:background="#3072bc"
android:layout_marginRight="10dp"
android:layout_marginLeft="7dp"
>
<RelativeLayout
android:id="@+id/ifltek_sure"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:background="#549ae7"
android:layout_margin="0.5dp"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="确定"
android:textAppearance="?android:attr/textAppearanceMediumInverse"
android:textColor="#FFFFFF"
android:paddingTop="5dp"
android:paddingBottom="5dp"
/>
</RelativeLayout>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</RelativeLayout>
3:添加封装好的工具类
<pre name="code" class="java">/**
*
*/
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.widget.Toast;
import com.iflytek.autoupdate.IFlytekUpdate;
import com.iflytek.autoupdate.IFlytekUpdateListener;
import com.iflytek.autoupdate.UpdateConstants;
import com.iflytek.autoupdate.UpdateErrorCode;
import com.iflytek.autoupdate.UpdateInfo;
import com.iflytek.autoupdate.UpdateType;
/**
* @author lianwanfei
*用于自动更新功能
*/
public class UpdateUtils {
private IFlytekUpdate updManager;
private Toast mToast;
private Context context;
/**
*
*/
public UpdateUtils(Context context) {
// TODO Auto-generated constructor stub
this.context=context;
init();
}
private void init(){
mToast = Toast.makeText(context, "", Toast.LENGTH_SHORT);
updManager = IFlytekUpdate.getInstance(context);
updManager.setDebugMode(true);
updManager.setParameter(UpdateConstants.EXTRA_WIFIONLY, "true");
updManager.setParameter(UpdateConstants.EXTRA_STYLE, UpdateConstants.UPDATE_UI_DIALOG);
}
/**
* 如果是主动请求(如更多界面),则initiatively传入true
* @param initiatively
*/
public void update(boolean initiatively){
if(initiatively)
updManager.autoUpdate(context, updateListener);
else
updManager.autoUpdate(context, null);
}
//升级版本
private IFlytekUpdateListener updateListener = new IFlytekUpdateListener() {
@Override
public void onResult(int errorcode, UpdateInfo result) {
if(errorcode == UpdateErrorCode.OK && result!= null) {
if(result.getUpdateType() == UpdateType.NoNeed) {
//取得当前版本
PackageManager packageManager = context.getPackageManager();
PackageInfo packInfo;
String mVersion="";
try {
packInfo = packageManager.getPackageInfo(context.getPackageName(),0);
mVersion = packInfo.versionName;
} catch (NameNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
showTip("当前版本为:"+mVersion+",已经是最新版本!");
return;
}
updManager.showUpdateInfo(context, result);
}
else
{
showTip("请求更新失败!\n更新错误码:" + errorcode);
}
}
};
private void showTip(final String str) {
mToast.setText(str);
mToast.show();
}
}
4:使用相当简单
UpdateUtils.getInstance(getApplication()).update(true);//若需要反馈是否为最新版本则传入true,不需要则传false
注意,这里要用getApplication(),不然会引起内存泄漏哦。