最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android 下載并打開(kāi)PDF,Doc,Dwg文檔實(shí)例

 更新時(shí)間:2017年04月14日 08:33:55   作者:Zhou灬hao  
本篇文章主要介紹了Android 下載并打開(kāi)PDF,Doc,Dwg文檔實(shí)例,具有一定的參考價(jià)值,有興趣的可以了解一下。

今天項(xiàng)目中遇到這樣一個(gè)需求 ,根據(jù)后臺(tái)接口里pdf,doc,dwg文檔的地址 是一個(gè)URL ,需要根據(jù)文檔的url 下載到本地(內(nèi)部存儲(chǔ)或內(nèi)存卡)并用手機(jī)中能打開(kāi)該文檔的軟件彈出來(lái)并打開(kāi),(這里需要做一個(gè)緩存,第一次查看這個(gè)文檔是在服務(wù)器上下載并打開(kāi),以后打開(kāi)不需要下載直接打開(kāi)本地的文檔)在網(wǎng)上找了些資料 寫(xiě)了以下代碼,下面分享給大家;

效果圖:

代碼:

這是一個(gè)單獨(dú)的類(lèi) 首先接收intent傳過(guò)來(lái)的url我是用url的后14位作為存儲(chǔ)本地的文件名(這里根據(jù)自己服務(wù)器的文件命名規(guī)則而定) 拿到文件路徑之后 判斷本地是否有此文件 有則打開(kāi)沒(méi)有則從服務(wù)器上下載并打開(kāi) ;

  Intent intent = act.getIntent();
  final String Strname = intent.getStringExtra("docurl");
  //截取最后14位 作為文件名
  String s = Strname.substring(Strname.length()-14);
  //文件存儲(chǔ)
  file1 = new File(Environment.getExternalStorageDirectory(), getFileName(s));
  new Thread() {
   public void run() {
    File file = new File( file1.getAbsolutePath());
    //判斷是否有此文件
    if (file.exists()) {
     //有緩存文件,拿到路徑 直接打開(kāi)
     Message msg = Message.obtain();
     msg.obj = haha;
     msg.what = DOWNLOAD_SUCCESS;
     handler.sendMessage(msg);
     mProgressDialog.dismiss();
     return;
    }
//    本地沒(méi)有此文件 則從網(wǎng)上下載打開(kāi)
    File downloadfile = downLoad(Strname, file1.getAbsolutePath(), mProgressDialog);
//    Log.i("Log",file1.getAbsolutePath());
    Message msg = Message.obtain();
    if (downloadfile != null) {
     // 下載成功,安裝....
     msg.obj = downloadfile;
     msg.what = DOWNLOAD_SUCCESS;
    } else {
     // 提示用戶(hù)下載失敗.
     msg.what = DOWNLOAD_ERROR;
    }
    handler.sendMessage(msg);
    mProgressDialog.dismiss();
   };
  }.start();

下載文檔代碼;

傳入需要下載的文檔的url 和存入內(nèi)存的路徑和dialog

 public static File downLoad(String serverpath, String savedfilepath, ProgressDialog pd) {
  try {
   URL url = new URL(serverpath);
   HttpURLConnection conn = (HttpURLConnection) url.openConnection();
   conn.setConnectTimeout(5000);
   if (conn.getResponseCode() == 200) {
    int max = conn.getContentLength();
    pd.setMax(max);
    InputStream is = conn.getInputStream();
    File file = new File(savedfilepath);
    FileOutputStream fos = new FileOutputStream(file);
    int len = 0;
    byte[] buffer = new byte[1024];
    int total = 0;
    while ((len = is.read(buffer)) != -1) {
     fos.write(buffer, 0, len);
     total += len;
     pd.setProgress(total);
    }
    fos.flush();
    fos.close();
    is.close();
    return file;
   } else {
    return null;
   }
  } catch (Exception e) {
   e.printStackTrace();

  }

 }

打開(kāi)文件選擇器

Handler handler = new Handler() {
  public void handleMessage(android.os.Message msg) {
   switch (msg.what) {
   case DOWNLOAD_SUCCESS:
    File file = (File) msg.obj;
    Intent intent = new Intent("android.intent.action.VIEW");
    intent.addCategory("android.intent.category.DEFAULT");
    intent.addFlags (Intent.FLAG_ACTIVITY_NEW_TASK);
    intent.setDataAndType (Uri.fromFile(file), "application/pdf");
//    startActivity(intent);
    startActivity(Intent.createChooser(intent, "標(biāo)題"));
    /**
     * 彈出選擇框之后 把本activity銷(xiāo)毀
     */
    finish();
    break;
   case DOWNLOAD_ERROR:
    Util.showToast(act,"文件加載失敗");
    break;
   }
  }
 };

整體代碼

public class list_item_doc extends BaseActivity {

 private ProgressDialog mProgressDialog;

 // 下載失敗
 public static final int DOWNLOAD_ERROR = 2;
 // 下載成功
 public static final int DOWNLOAD_SUCCESS = 1;
 private File file1;
 @Override
 protected void onCreate(Bundle arg0) {
  // TODO Auto-generated method stub
  super.onCreate(arg0);

  initView();
 }

 private void initView() {
  // TODO Auto-generated method stub
  Intent intent = act.getIntent();
  final String Strname = intent.getStringExtra("url");
  mProgressDialog = new ProgressDialog(act);
  mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
  mProgressDialog.setCancelable(false);
  mProgressDialog.show();
  //截取最后14位 作為文件名
  String s = Strname.substring(Strname.length()-14);
  //文件存儲(chǔ)
  file1 = new File(Environment.getExternalStorageDirectory(), getFileName(s));
  new Thread() {
   public void run() {

    File haha = new File( file1.getAbsolutePath());
    //判斷是否有此文件
    if (haha.exists()) {
     //有緩存文件,拿到路徑 直接打開(kāi)
     Message msg = Message.obtain();
     msg.obj = haha;
     msg.what = DOWNLOAD_SUCCESS;
     handler.sendMessage(msg);
     mProgressDialog.dismiss();
     return;
    }
//    本地沒(méi)有此文件 則從網(wǎng)上下載打開(kāi)
    File downloadfile = downLoad(Strname, file1.getAbsolutePath(), mProgressDialog);
//    Log.i("Log",file1.getAbsolutePath());
    Message msg = Message.obtain();
    if (downloadfile != null) {
     // 下載成功,安裝....
     msg.obj = downloadfile;
     msg.what = DOWNLOAD_SUCCESS;
    } else {
     // 提示用戶(hù)下載失敗.
     msg.what = DOWNLOAD_ERROR;
    }
    handler.sendMessage(msg);
    mProgressDialog.dismiss();
   };
  }.start();
 }

 /**
  * 下載完成后 直接打開(kāi)文件
  */
 Handler handler = new Handler() {
  public void handleMessage(android.os.Message msg) {
   switch (msg.what) {
   case DOWNLOAD_SUCCESS:
    File file = (File) msg.obj;
    Intent intent = new Intent("android.intent.action.VIEW");
    intent.addCategory("android.intent.category.DEFAULT");
    intent.addFlags (Intent.FLAG_ACTIVITY_NEW_TASK);
    intent.setDataAndType (Uri.fromFile(file), "application/pdf");
//    startActivity(intent);
    startActivity(Intent.createChooser(intent, "標(biāo)題"));
    /**
     * 彈出選擇框 把本activity銷(xiāo)毀
     */
    finish();
    break;
   case DOWNLOAD_ERROR:
    Util.showToast(act,"文件加載失敗");
    break;
   }
  }
 };
/**
 *
 */


 /**
  * 傳入文件 url 文件路徑 和 彈出的dialog 進(jìn)行 下載文檔
  */
 public static File downLoad(String serverpath, String savedfilepath, ProgressDialog pd) {
  try {
   URL url = new URL(serverpath);
   HttpURLConnection conn = (HttpURLConnection) url.openConnection();
   conn.setConnectTimeout(5000);
   if (conn.getResponseCode() == 200) {
    int max = conn.getContentLength();
    pd.setMax(max);
    InputStream is = conn.getInputStream();
    File file = new File(savedfilepath);  
    FileOutputStream fos = new FileOutputStream(file);
    int len = 0;
    byte[] buffer = new byte[1024];
    int total = 0;
    while ((len = is.read(buffer)) != -1) {
     fos.write(buffer, 0, len);
     total += len;
     pd.setProgress(total);
    }
    fos.flush();
    fos.close();
    is.close();
    return file;
   } else {
    return null;
   }
  } catch (Exception e) {
   e.printStackTrace();
   return null;
  }

 }

 public static String getFileName(String serverurl) {
  return serverurl.substring(serverurl.lastIndexOf("/") + 1);
 }

}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Android EditText長(zhǎng)按菜單中分享功能的隱藏方法

    Android EditText長(zhǎng)按菜單中分享功能的隱藏方法

    Android EditText控件是經(jīng)常使用的控件,下面這篇文章主要給大家介紹了關(guān)于Android中EditText長(zhǎng)按菜單中分享功能的隱藏方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02
  • android studio的安裝(史上最詳細(xì))

    android studio的安裝(史上最詳細(xì))

    這篇文章主要介紹了android studio的安裝(史上最詳細(xì)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Android 中ContentProvider的實(shí)例詳解

    Android 中ContentProvider的實(shí)例詳解

    這篇文章主要介紹了Android 中ContentProvider的實(shí)例詳解的相關(guān)資料,希望通過(guò)本文大家能掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-09-09
  • Android小知識(shí)之圖片的3種壓縮方式小結(jié)

    Android小知識(shí)之圖片的3種壓縮方式小結(jié)

    這篇文章主要給大家介紹了關(guān)于Android小知識(shí)之圖片的3種壓縮方式的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-10-10
  • Ubuntu中為Android系統(tǒng)上實(shí)現(xiàn)內(nèi)置C可執(zhí)行程序測(cè)試Linux內(nèi)核驅(qū)動(dòng)程序

    Ubuntu中為Android系統(tǒng)上實(shí)現(xiàn)內(nèi)置C可執(zhí)行程序測(cè)試Linux內(nèi)核驅(qū)動(dòng)程序

    本文主要介紹在Ubuntu上為Android系統(tǒng)內(nèi)置C可執(zhí)行程序測(cè)試Linux內(nèi)核驅(qū)動(dòng)程序,這里對(duì)測(cè)試Linux 內(nèi)核驅(qū)動(dòng)程序做了詳細(xì)介紹,并附有代碼示例,有興趣的小伙伴可以參考下
    2016-08-08
  • Android之Compose頁(yè)面切換動(dòng)畫(huà)介紹

    Android之Compose頁(yè)面切換動(dòng)畫(huà)介紹

    大家好,本篇文章主要講的是Android之Compose頁(yè)面切換動(dòng)畫(huà)介紹,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • Android傳感器SensorEventListener之加速度傳感器

    Android傳感器SensorEventListener之加速度傳感器

    今天小編就為大家分享一篇關(guān)于Android傳感器SensorEventListener之加速度傳感器,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-02-02
  • android播放視頻時(shí)在立體聲與單聲道之間切換無(wú)變化原因分析及解決

    android播放視頻時(shí)在立體聲與單聲道之間切換無(wú)變化原因分析及解決

    使用第三方視頻播放器,有立體聲與單聲道之間切換,發(fā)現(xiàn)切換后無(wú)作用,原因是由于在HAL層默認(rèn)沒(méi)有處理上層發(fā)的stereo 轉(zhuǎn)mono的命令,具體的解決方法如下
    2013-06-06
  • Flutter替換字符串中的html標(biāo)簽

    Flutter替換字符串中的html標(biāo)簽

    這篇文章主要為大家介紹了Flutter替換字符串中的html標(biāo)簽實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2023-05-05
  • Android調(diào)用系統(tǒng)自帶的分享功能實(shí)例代碼

    Android調(diào)用系統(tǒng)自帶的分享功能實(shí)例代碼

    本篇文章主要介紹了Android調(diào)用系統(tǒng)自帶的分享功能實(shí)例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-04-04

最新評(píng)論

安庆市| 西和县| 南漳县| 玉树县| 怀集县| 普兰店市| 惠来县| 连州市| 平顺县| 武强县| 临朐县| 台前县| 西昌市| 阿勒泰市| 桓仁| 屏山县| 榕江县| 南皮县| 蒙自县| 桐庐县| 建水县| 新余市| 德兴市| 措美县| 温宿县| 靖江市| 施甸县| 诸暨市| 阿合奇县| 永嘉县| 阜阳市| 涟源市| 枣阳市| 邯郸县| 平陆县| 闻喜县| 南城县| 濮阳县| 雅江县| 兖州市| 山东|