一种 发给系统 让系统安装  但是会出现 安装界面  还得点击  比较麻烦。 

一种 是 静默安装,  不了解的 百度一下就出来了。 这个安装后,  如果手机安装了 360  百度管家 等软家  在通知栏会提示 软件安装成功。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.INSTALL_PACKAGES" />
    <uses-permission android:name="android.permission.DELETE_PACKAGES" />
    <uses-permission android:name="android.permission.CLEAR_APP_CACHE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.CLEAR_APP_USER_DATA" />

因为有些是系统权限  +进去后  manifest 会出错  clean 一下 就可以了 。
要安装的 apk 放到  assets 目录下  安装时  先将 目录下的 apk 拷贝到 SD 卡上  改名为 temp.apk  然后安装temp.apk 

1.判断是否已经安装过此App ,android 里面识别App的唯一方法是通过App的packetName 作为唯一识别依据


[java]  view plain  copy



2.静默安装

1. PackageInfo packageInfo;  
2. try {  
3.                        packageInfo = getPackageManager().getPackageInfo(  
4. "com.example.imgrefocus", 0);  
5. catch (NameNotFoundException e) {  
6. null;  
7.                        e.printStackTrace();  
8.   
9.                }  
10. if (packageInfo == null) {  
11. // 启用安装新线程  
12. new Thread(new Runnable() {  
13. @Override  
14. public void run() {  
15. "hao", "未安装进行安装");  
16. // 未安装进行安装                          
17.                                }  
18.                        }).start();  
19. else {  
20. "hao", "已经安装");  
21.                }


[java]  view plain  copy




    1. /**
    2.          * 静默安装
    3.          * 
    4.          * @param file
    5.          * @return
    6.          */  
    7. public boolean slientInstall() {  
    8. // 进行资源的转移 将assets下的文件转移到可读写文件目录下  
    9. new File(Environment.getExternalStorageDirectory()  
    10. "/temp.apk");  
    11.   
    12. boolean result = false;  
    13. null;  
    14. null;  
    15.                 System.out.println(file.getPath());  
    16. if (file.exists()) {  
    17. "==");  
    18. try {  
    19. "su");  
    20.                                 out = process.getOutputStream();  
    21. new DataOutputStream(out);  
    22. "chmod 777 " + file.getPath()  
    23. "\n"); // 获取文件所有权限  
    24.                                 dataOutputStream  
    25. "LD_LIBRARY_PATH=/vendor/lib:/system/lib pm install -r "  
    26. // 进行静默安装命令  
    27. // 提交命令  
    28.                                 dataOutputStream.flush();  
    29. // 关闭流操作  
    30.                                 dataOutputStream.close();  
    31.                                 out.close();  
    32. int value = process.waitFor();  
    33.   
    34. // 代表成功  
    35. if (value == 0) {  
    36. "hao", "安装成功!");  
    37. true;  
    38. else if (value == 1) { // 失败  
    39. "hao", "安装失败!");  
    40. false;  
    41. else { // 未知情况  
    42. "hao", "未知情况!");  
    43. false;  
    44.                                 }  
    45. catch (IOException e) {  
    46.                                 e.printStackTrace();  
    47. catch (InterruptedException e) {  
    48.                                 e.printStackTrace();  
    49.                         }  
    50. if (!result) {  
    51. "hao", "root权限获取失败,将进行普通安装");  
    52. new Intent();  
    53.                                 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
    54.                                 intent.setAction(android.content.Intent.ACTION_VIEW);  
    55.                                 intent.setDataAndType(Uri.fromFile(file),  
    56. "application/vnd.android.package-archive");  
    57.                                 startActivity(intent);  
    58. true;  
    59.                         }  
    60.                 }  
    61.   
    62. return result;  
    63.         }  
    64.   
    65. public void createFile() {  
    66. null;  
    67. null;  
    68. try {  
    69. this.getAssets().open("ImgRefocus.apk");  
    70. new File(Environment.getExternalStorageDirectory()  
    71. "/temp.apk");  
    72.                         file.createNewFile();  
    73. new FileOutputStream(file);  
    74. byte[] temp = new byte[1024];  
    75. int i = 0;  
    76. while ((i = is.read(temp)) > 0) {  
    77. 0, i);  
    78.                         }  
    79. catch (IOException e) {  
    80. // TODO Auto-generated catch block  
    81.                         e.printStackTrace();  
    82. finally {  
    83. if (is != null) {  
    84. try {  
    85.                                         is.close();  
    86. catch (IOException e) {  
    87. // TODO Auto-generated catch block  
    88.                                         e.printStackTrace();  
    89.                                 }  
    90.                         }  
    91. if (fos != null) {  
    92. try {  
    93.                                         fos.close();  
    94. catch (IOException e) {  
    95. // TODO Auto-generated catch block  
    96.                                         e.printStackTrace();  
    97.                                 }  
    98.                         }  
    99.   
    100.                 }  
    101.   
    102.         }



    如果没有root过的手机想要静默安装的话,目前"好像"是没有办法绕过的,如果每个软件都能静默安装的话,Android手机就到处是病毒了,所以一般手机的厂商都会建议不要root手机,获取手机的最高权限的,对手机小白来 说不安全

    没有root过的手机安装的时候始终都会弹出安装的提示,相当于用Intent 打开安装的界面,然后把apk的安装路径传递过去

    就然后就能安装了,至于为啥放在Asset目录下面是因为Asset目录下面的文件是不会压缩的,可以用来存放静态的Sqlite 3的db 文件,gif图片,音频文件之类的,使用的时候只需要用文件流读入到手机的内存卡中即可