開(kāi)發(fā)過(guò)程中肯定會(huì)遇到這樣的一個(gè)功能:點(diǎn)擊圖標(biāo)下載apk市袖,安裝后實(shí)現(xiàn)功能跳轉(zhuǎn),現(xiàn)簡(jiǎn)單記錄一下烁涌,以防以后用上苍碟。
1、先判斷當(dāng)前手機(jī)或者平板有沒(méi)有安裝該apk
/**
* 判斷有沒(méi)有安裝該apk
* @param packageName
* @param context
* @return
*/
public static boolean isAvilible(String packageName,Context context) {
final PackageManager packageManager = context.getPackageManager();
// 獲取所有已安裝程序的包信息
List<PackageInfo> pinfo = packageManager.getInstalledPackages(0);
for (int i = 0; i < pinfo.size(); i++) {
if (pinfo.get(i).packageName.equalsIgnoreCase(packageName))
return true;
}
return false;
}
2撮执、復(fù)制assert目錄下的apk到sd卡中(該方式實(shí)現(xiàn)的是:要下載的apk先放到assert目錄下)
/**
* 復(fù)制assert目錄下的apk到sd卡中
* @param context
* @param apkName
* @return
*/
public static boolean copyApkFromAssets(Context context,String apkName) {
String path = Environment.getExternalStorageDirectory().getAbsolutePath()+"/"+apkName;
boolean copyIsFinish = false;
try {
InputStream is = context.getAssets().open(apkName);
File file = new File(path);
file.createNewFile();
FileOutputStream fos = new FileOutputStream(file);
byte[] temp = new byte[1024];
int i = 0;
while ((i = is.read(temp)) > 0) {
fos.write(temp, 0, i);
}
fos.close();
is.close();
copyIsFinish = true;
} catch (IOException e) {
e.printStackTrace();
}
return copyIsFinish;
}
3微峰、提示用戶是否要安裝
/**
* 彈窗提示用戶安裝與否
* @param apkName
*/
private void showInstallApkOrNo(final String apkName){
if (AppUtils.copyApkFromAssets(getActivity(), apkName)) {
Dialog builder = new AlertDialog.Builder(getActivity())
.setIcon(R.drawable.ic_launcher)
.setMessage("是否安裝?")
.setNegativeButton("取消", null)
.setPositiveButton("確定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setDataAndType(Uri.parse("file://" + Environment.getExternalStorageDirectory().getAbsolutePath()+"/"+apkName), "application/vnd.android.package-archive");
getActivity().startActivity(intent);
}
})
.create();
builder.show();
}
}
4抒钱、實(shí)現(xiàn)功能跳轉(zhuǎn)
private void jumpToIntegrationFunction(int position){
String apkName = "app-release.apk";
String packageName = "com.tecsun.tsb.integration.hubei";
String srcActivity = "com.tecsun.tsb.integration.hubei.activity.MainActivity";
if ( !AppUtils.isAvilible( packageName , getActivity( ) ) ){
// LogUtils.v( "com.tecsun.tsb.integration.hubei not installed" );
// return;
showInstallApkOrNo(apkName);
return;
}
int type = -1;
if ( position == 0 ) {
type = TQ_APPLY;
}
if ( position == 11 ) {
type = TQ_INTRODUCE;
}
if ( type > 0 ) {
Intent intent = new Intent( );
srcActivity = packageName + ".activity.MainActivity";
ComponentName componentName = new ComponentName( packageName ,
srcActivity );
intent.setComponent( componentName );
intent.putExtra( "type" , type );
intent.putExtra( "TOKEN_ID" , AppApplication.TOKEN_ID );
intent.setAction( srcActivity );
getActivity( ).startActivity( intent );
return;
}
}