美文网首页
关于app下载的问题。

关于app下载的问题。

作者: 苏鑫最胖的一组 | 来源:发表于2017-03-21 16:09 被阅读0次

    由于app避免不了,系统更新。和内部下载。

    本人也是应公司需求去写一个,但是由于自己技术不扎实所有写个简书记录下,  我直接上代码。让我讲原理不太可行。所以见谅。

    /**

    * 下载Apk 安装Apk 打开APK

    *

    *@authorAdministrator

    */

    public classMainActivityextendsActivity {

    privateButtonbutton1;

    private static finalStringURL_STRING="http://gdown.baidu.com/data/wisegame/b7d7e4efd8199dea/tianyiyuedu_310.apk";

    private static intdown=0;

    Filefile;

    privateHandlerhandler=newHandler() {

    @Override

    public voidhandleMessage(Message msg) {

    super.handleMessage(msg);

    switch(msg.what) {

    case1:

    button1.setText("点击安装");

    down=1;

    break;

    case2:

    down=2;

    button1.setText("打开");

    break;

    }

    }

    };

    @Override

    protected voidonCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    button1= (Button) findViewById(R.id.btn);

    button1.setOnClickListener(newView.OnClickListener() {

    @Override

    public voidonClick(View v) {

    // 下载apk

    if(down==0) {

    downloadApk();

    button1.setText("正在下载");

    // 安装APK

    }else if(down==1) {

    installApk();

    // 打开apk

    }else if(down==2) {

    openApk(this,URL_STRING);

    }

    }

    });

    /**注册下载完成广播**/

    registerReceiver(downloadCompleteReceiver, newIntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));

    }

    /**

    * 下载APK

    **/

    private voiddownloadApk() {

    //        String apkUrl = "http://192.168.1.1/downloadtest.apk";

    Uri uri = Uri.parse(URL_STRING);

    DownloadManager downloadManager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);

    DownloadManager.Request request =newDownloadManager.Request(uri);

    // 设置允许使用的网络类型,这里是移动网络和wifi都可以

    request.setAllowedNetworkTypes(request.NETWORK_MOBILE| request.NETWORK_WIFI);

    //设置是否允许漫游

    request.setAllowedOverRoaming(false);

    //设置文件类型

    MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton();

    String mimeString = mimeTypeMap.getMimeTypeFromExtension(MimeTypeMap.getFileExtensionFromUrl(URL_STRING));

    request.setMimeType(mimeString);

    //在通知栏中显示

    request.setNotificationVisibility(request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);

    request.setTitle("download...");

    request.setVisibleInDownloadsUi(true);

    //sdcard目录下的download文件夹

    request.setDestinationInExternalPublicDir("/download","downloadtest.apk");

    // 将下载请求放入队列

    downloadManager.enqueue(request);

    Message message =handler.obtainMessage();

    message.what=1;

    handler.sendMessage(message);

    }

    privateBroadcastReceiverdownloadCompleteReceiver=newBroadcastReceiver() {

    @Override

    public voidonReceive(Context context,Intent intent) {

    /**下载完成后安装APK**/

    installApk();

    }

    };

    private voidinstallApk() {

    Intent i =newIntent(Intent.ACTION_VIEW);

    String filePath ="/sdcard/download/downloadtest.apk";

    Message message =handler.obtainMessage();

    message.what=2;

    handler.sendMessage(message);

    i.setDataAndType(Uri.parse("file://"+ filePath),"application/vnd.android.package-archive");

    startActivity(i);

    }

    /**

    * 打开已经安装好的apk

    */

    private voidopenApk(View.OnClickListener context,String url) {

    PackageManager manager = getPackageManager();

    // 这里的是你下载好的文件路径

    PackageInfo info = manager.getPackageArchiveInfo(Environment.getExternalStorageDirectory().getAbsolutePath() + getFilePath(url),PackageManager.GET_ACTIVITIES);

    if(info !=null) {

    Intent intent = manager.getLaunchIntentForPackage(info.applicationInfo.packageName);

    startActivity(intent);

    }

    }

    /**

    * 根据传过来url创建文件

    */

    privateFilegetFile(String url) {

    File files =newFile(Environment.getExternalStorageDirectory().getAbsoluteFile(),getFilePath(url));

    returnfiles;

    }

    /**

    * 截取出url后面的apk的文件名

    *

    *@paramurl

    *@return

    */

    privateStringgetFilePath(String url) {

    returnurl.substring(url.lastIndexOf("/"),url.length());

    }

    }

    直接粘贴过去。 格式化就能用。 布局就是一个button 没必要粘贴上来

    相关文章

      网友评论

          本文标题:关于app下载的问题。

          本文链接:https://www.haomeiwen.com/subject/fhsgnttx.html