我所拥有的是多个按钮。使用if-else语句,我将文件下载到相应的按钮。现在,我还在if-else语句中定义了要通过intent打开的类。我需要它,以便它将开始下载文件,然后开始一个新的活动。我曾经使用AsyncTask执行此操作,并在onPostExecute中启动新意图,但我认为最好使用DownloadManager。所以,你可能会感到困惑。所以我将通过我的代码解释......
所以,我在这里全力以赴:
BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(action)) {
long downloadId = intent.getLongExtra(
DownloadManager.EXTRA_DOWNLOAD_ID, 0);
Query query = new Query();
query.setFilterById(enqueue);
Cursor c = dm.query(query);
if (c.moveToFirst()) {
int columnIndex = c
.getColumnIndex(DownloadManager.COLUMN_STATUS);
if (DownloadManager.STATUS_SUCCESSFUL == c
.getInt(columnIndex)) {
String uriString = c
.getString(c
.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI));
}
}
}
}
};
registerReceiver(receiver, new IntentFilter(
DownloadManager.ACTION_DOWNLOAD_COMPLETE));
确定。现在,在我的if-else中,我声明要下载的url,以及设置一个等于一个类的字符串,以及另一个等于输出文件的字符串:
if (andy != null){
className = "com.cydeon.plasmamodz.Softkeys";
fileName = "batterymod.zip";
dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
Request req = new Request(
Uri.parse("https://dl.dropbox.com/s/gfukrwqy4xqrnj9/Android.zip"));
req.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS,
fileName);
enqueue = dm.enqueue(req);
}
确定。所以一切都很好。现在,我的showDownload:
public void showDownload(View view) {
Intent i = new Intent();
i.setAction(DownloadManager.ACTION_VIEW_DOWNLOADS);
startActivity(i);
好。现在,下载。所以,现在它正在下载,我需要开始一项新的活动。而且,我已经研究并尝试了一些东西,但没有任何作用。如您所见,我已经在字符串中设置了一个类。我有这个代码,我在onPostExecute中使用,所以我知道它工作正常:
try {
Intent openNewIntent = new Intent(Bmod.this, Class.forName(className) );
startActivity( openNewIntent );
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
所以,我会重复我想要的。我想下载一个文件,然后在执行下载后,启动一个新活动。任何帮助是极大的赞赏。谢谢!
编辑 - 这是一个更新的代码:
public void showDownload(View view) {
Context context = getApplicationContext();
CharSequence text = "Download complete";
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, text, duration);
toast.show();
try {
Intent openNewIntent = new Intent(Bmod.this, Class.forName(className) );
startActivity( openNewIntent );
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
答案 0 :(得分:1)
将startActivity()调用放入广播接收器的onReceive()中,以便在通知接收方下载完成时启动活动。