[英]Android Firebase Storage Keep Uploading When Activity Is Destroyed
當有人使用我的 android 應用程序將視頻上傳到 Firebase 存儲時,我希望即使活動被破壞也能上傳視頻。 我嘗試使用 asynctask,但它似乎不起作用。 這是異步任務代碼:
public class UploadAttachment extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
userRef.child("currentSeason").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
final String attachCurrentSeason = dataSnapshot.getValue().toString();
seasonRef.child("id").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String path = "users/" + mAuth.getUid() + "/" + attachCurrentSeason + "/game" + String.valueOf(Integer.parseInt(dataSnapshot.getValue().toString()) - 1);
StorageReference storageReference = storage.getReference(path);
storageReference.putBytes(byteArray);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
return null;
}
}
我讀過很多東西說當活動被銷毀時 Asynctask 仍然會運行,但它對我不起作用。 不允許在 asynctask 中使用 firebase 嗎?
任何幫助表示贊賞。 提前致謝!
由於視頻發送量很大,我建議您使用后台服務,您可以在官方 Android 文檔中找到相關信息。
你可以這樣創建:(最好定義一個單獨的 UploadVideoService.java 類)
public class UploadVideoService extends IntentService {
public UploadVideoService() {
super("UploadVideoService");
}
@Override
protected void onHandleIntent(Intent workIntent) {
String path = workIntent.getStringExtra("path");
StorageReference storageReference = storage.getReference(path);
storageReference.putBytes(workIntent.getByteArrayExtra("data"));
}
}
在您的 Activity 中,啟動將所有數據傳遞給它的服務:
//...
userRef.child("currentSeason").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
final String attachCurrentSeason = dataSnapshot.getValue().toString();
seasonRef.child("id").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String path = "users/" + mAuth.getUid() + "/" + attachCurrentSeason + "/game" + String.valueOf(Integer.parseInt(dataSnapshot.getValue().toString()) - 1);
// here you call the service, replace Activity with your Activity name
Intent mServiceIntent = new Intent(Activity.this, UploadVideoService.class);
mServiceIntent.putExtra("path", path);
mServiceIntent.putExtra("data", byteArray);
startService(mServiceIntent);
}
@Override
public void onCancelled(DatabaseError databaseError) {}
});
}
}
@Override
public void onCancelled(DatabaseError databaseError) {}
});
//...
您還必須在清單中定義服務,如下所示:
<service android:name=".UploadVideoService" android:exported="false"/>
例如,上傳完成后,您可以在通知欄中放置通知以告訴用戶作業已完成。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.