2017-04-10 10 views
0

DownloadManagerライブラリを使用して.apkファイルをダウンロードします。ダウンロードサービス用にBroadcastReceiverがあります。ここに私のコードは)(onRecieveである:私はsomtimesファイルを返すUriForDownloadedFile(id)を呼び出すときAndroid DownloadManagerクラス:getUriForDownloadedFileは間違ったパスを返します

long id = intent.getExtras().getLong(DownloadManager.EXTRA_DOWNLOAD_ID); 
    DownloadManager dm = (DownloadManager)context.getSystemService(context.DOWNLOAD_SERVICE); 

    intent = new Intent(Intent.ACTION_VIEW); 
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    intent.setDataAndType(dm.getUriForDownloadedFile(id), "application/vnd.android.package-archive"); 
    context.startActivity(intent); 

ここでの問題は次のとおりです。///storage/emulated/0/Download/example.apk 、別のデバイスに//ダウンロード/ all_downloads/183

と私は(コンテンツ://ダウンロード/ all_downloads/183)でAPKをインストールカント: 内容を返すDownloadManagerファイルをダウンロードした場所、あなたがいたとして

答えて

1

あなたは、知っているパスそれをダウンロードする場所を教えてくれた人。したがって、Android 6.0以前の端末ではgetUriForDownloadedFile(id)を取り除き、DownloadManagerにファイルをダウンロードするようにFileにはUri.fromFile()を使用してください。

targetSdkVersionが24以上になると、Android 7.0以降でcontentUriを使用する必要があります。幸運なことに、インストーラは、Android 7.0以降でcontentスキームを処理する方法を知っています。

+0

**注! 'DownloadManager'は、私が決めたパスにいつもダウンロードするとは限りません!**いつですか?ファイルが既にパスに存在する場合。その後、 'DownloadManager'はそれを別のパスにダウンロードします。 –

1
registerReceiver(
     new BroadcastReceiver() { 
      @Override public void onReceive(Context context, Intent intent) { 
       final long downloadId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, 0); 
       if (downloadId == 0) return; 

       final Cursor cursor = downloadManager.query(
        new DownloadManager.Query().setFilterById(downloadId)); 

       if (cursor.moveToFirst()) { 
        final String downloadedTo = cursor.getString(
         cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI)); 
        Log.d(TAG, "The file has been downloaded to: " + downloadedTo); 

        context.startActivity(new Intent(Intent.ACTION_VIEW) 
         .setDataAndType(Uri.parse(downloadedTo), 
           "application/pdf")); 
       } 
      } 
     }, 
     new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE)); 
} 
関連する問題