Я хочу создать приложение, в котором я могу загружать файлы pdf и открывать их - PullRequest
0 голосов
/ 19 июня 2020

Я хочу создать что-то вроде Whatsapp, скачивая туда файлы. Я попробовал диспетчер загрузок, но он открывает пустой документ с указанным идентификатором. Я не знаю, как использовать firebase, но все говорят, что это должно работать. Я даже пытался найти местоположение загруженного файла на моем устройстве, но он виден только при загрузке, а не в файловом менеджере

public class Notes extends AppCompatActivity implements LoaderManager.LoaderCallbacks<List<PdfDocument>>{

private static final String TAG = "MyActivity";

private PdfDocumentAdapter pdfDocuments;
DownloadManager dm;
long queueId;
String Title;
String Description;
String url;
private static final String MAIN_URL = "https://lazyengineer.tech/leapi/polytechnic/?branch=Computer%20Engineering&types=ebook&api=ayjLCzL0IphkNbN1IjugUQ&format=json";


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_notes);
    ConnectivityManager cm = (ConnectivityManager)this.getSystemService(this.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
    boolean isConnected = activeNetwork != null && activeNetwork.isConnectedOrConnecting();
    if(isConnected) {
        pdfDocuments = new PdfDocumentAdapter(this, new ArrayList<PdfDocument>());
        GridView gridView = (GridView) findViewById(R.id.grid);
        gridView.setAdapter(pdfDocuments);
        gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                PdfDocument currentPdfDocument = pdfDocuments.getItem(position);
                Title = currentPdfDocument.getTitle();
                Description = currentPdfDocument.getDescription();
                url = currentPdfDocument.getFileUrl();
                downloadPdf(url);


            }
        });
        getSupportLoaderManager().initLoader(0, null, this).forceLoad();
    }
    else {
        //TODO set text that not able to connect to the internet
    }


    BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if (dm.ACTION_DOWNLOAD_COMPLETE.equals(action)){
                Uri uri = dm.getUriForDownloadedFile(queueId);
                String mimeType = dm.getMimeTypeForDownloadedFile(queueId);

                Intent open = new Intent(Intent.ACTION_VIEW);
                open.setDataAndType(uri, mimeType);
                open.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
                startActivity(open);
            }
        }
    };
    registerReceiver(broadcastReceiver, new IntentFilter(dm.ACTION_DOWNLOAD_COMPLETE));

}

@NonNull
@Override
public Loader<List<PdfDocument>> onCreateLoader(int id, @Nullable Bundle args) {
    Uri baseUri = Uri.parse(MAIN_URL);
    Uri.Builder uriBuilder = baseUri.buildUpon();
    PdfLoader.MAIN_URL =  uriBuilder.toString();
    return new PdfLoader(this);
}

@Override
public void onLoadFinished(@NonNull Loader<List<PdfDocument>> loader, List<PdfDocument> data) {
    updateUi(data);
}

@Override
public void onLoaderReset(@NonNull Loader<List<PdfDocument>> loader) {
    loader.reset();
}

private void updateUi(final List<PdfDocument> data) {
    if(data != null) {
        if (!data.isEmpty()) {
            pdfDocuments.clear();
            pdfDocuments.addAll(data);
            return;
        }
    }
}

public void downloadPdf(String url){
    dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
    DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
    request.setDescription(Description).setTitle(Title);
    queueId = dm.enqueue(request);
}

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...