android应用后台安装,静默安装的代码实现方法
来源:互联网 发布:京东刷单辅助软件 编辑:程序博客网 时间:2024/05/16 09:11
所以,就想到要用静默安装的方式来实现。虽然本质也是两个独立的应用,但至少用户感觉不到。。。
网上找到一个方式是通过MMM交叉编译的方式,并且这种静默安装需要用户手机有root权限才可以。
你要有linux环境或其他可以mmm交叉编译的环境,因为这个用到的是隐藏api,SDK中没有的,ecilipse里面会提示包不存在,但交叉编译可以。
代码如下:
import android.app.Activity;
import android.os.Bundle;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.IPackageInstallObserver;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
public class InstallActivity extends Activity {
/** Called when the activity is first created. */
private Button btn2=null;
private final int INSTALL_COMPLETE = 1;
final static int SUCCEEDED = 1;
final static int FAILED = 0;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn=(Button) findViewById(R.id.btn2);
btn2.setOnClickListener(listener2);
}
private OnClickListener listener2=new OnClickListener(){
public void onClick(View v) {
String fileName = Environment.getExternalStorageDirectory() + "/baidu/"+"UC.apk";
Uri uri = Uri.fromFile(new File(fileName));
int installFlags = 0;
PackageManager pm = getPackageManager();
try {
PackageInfo pi = pm.getPackageInfo("com.uc.browser",
PackageManager.GET_UNINSTALLED_PACKAGES);
if(pi != null) {
installFlags |= PackageManager.INSTALL_REPLACE_EXISTING;
}
} catch (NameNotFoundException e) {
}
// String installerPackageName = getIntent().getStringExtra(
// Intent.EXTRA_INSTALLER_PACKAGE_NAME);
PackageInstallObserver observer = new PackageInstallObserver();
pm.installPackage(uri, observer, installFlags, "com.uc.browser");
}
};
class PackageInstallObserver extends IPackageInstallObserver.Stub {
public void packageInstalled(String packageName, int returnCode) {
Message msg = mHandler.obtainMessage(INSTALL_COMPLETE);
msg.arg1 = returnCode;
mHandler.sendMessage(msg);
}
};
private Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case INSTALL_COMPLETE:
// Update the status text
// Show the ok button
int centerTextLabel;
Drawable centerTextDrawable = null;
if(msg.arg1 == SUCCEEDED) {
} else {}
if (centerTextDrawable != null) {}
break;
default:
break;
}
}
};
}
重点是要实现一个这个类PackageInstallObserver,另外要注意import android.content.pm.……的那些包一定要导入。android.mk文件如下
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := user
LOCAL_SRC_FILES := $(call all-subdir-java-files)
LOCAL_PACKAGE_NAME := InstallActivity
LOCAL_CERTIFICATE := platform
include $(BUILD_PACKAGE)
重点是LOCAL_CERTIFICATE := platform要对
另外编译的时候有可能会报R.java类重复错误,把你工程下gen文件夹删除即可,不会影响编译,传说中会在别的地方自动生成。
此方式,因为有root限制,所以并没有动手测试。。。。留个记号,以后用到的时候再试试。
- android应用后台安装,静默安装的代码实现方法
- android应用后台安装,静默安装的代码实现方法
- android应用后台安装,静默安装的代码实现方法
- android应用后台安装,静默安装的代码实现方法
- android应用后台安装,静默安装的代码实现方法
- android静默安装的代码实现方法
- Android 实现Apk的后台静默安装
- 如何实现Android应用的静默安装
- 如何实现android应用的静默安装
- 如何实现Android应用的静默安装
- 如何实现Android应用的静默安装
- 如何实现Android应用的静默安装
- Android中实现应用的静默安装
- android应用静默安装方法
- Android应用的静默安装
- android 静默安装 后台安装
- Android 静默安装/后台安装
- Android 静默安装/后台安装
- 《重构改善既有代码的设计》之重构列表--简化函数调用(一)
- 常用正则表达式匹配
- C#操作XML文档
- Android Library工程实现模块复用
- android 通过apk方式接入第三方应用
- android应用后台安装,静默安装的代码实现方法
- 初学JNI知识(一)
- 初学JNI知识(二)
- 初学JNI知识(三)
- android2.2联系人表结构
- 《Android之大话设计模式》设计原则 第一章:针对接口编程 不要针对实现编程
- 《Android之大话设计模式》--设计原则 第二章:单一职责原则 乔峰VS慕容复
- VC中MessageBox的常见用法
- 《Android之大话设计模式》--设计原则 第三章:开放封闭原则 孙悟空任弼马温一职