android 實現(xiàn)Service上傳并在通知欄顯示進度條

手上項目需要實現(xiàn)選擇多個視頻后在上傳騰訊云,由于視頻較大大,所以選擇Service來進行上傳任務(wù),配合Notification顯示進度。

 NotificationManager mNotificationManager;
 RemoteViews view;
 List<String> paths; //需要上傳的視頻地址
 Notification notification;
 int notifyid = 30001; //自己設(shè)置就好
 @Override
public int onStartCommand(Intent intent,int flags,int startId) {
paths = intent.getStringArrayListExtra("paths");
String channelid="com.lianqin.upload";
mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
//android8.0 增加了渠道,如果不設(shè)置,在8.0下是無法顯示通知的,channelid自己定義就好,渠道名會顯示在系統(tǒng)設(shè)置-app的通知管理下
NotificationChannel Channe =new NotificationChannel(channelid,
"上傳服務(wù)", NotificationManager.IMPORTANCE_HIGH);
mNotificationManager.createNotificationChannel(Channe);
}
//寫一個帶ProgressBar和TextView的layout
//創(chuàng)建 RemoteViews下面用來更新進度
view =new RemoteViews(getPackageName(), R.layout.item_videoupload);
NotificationCompat.Builder builder =new NotificationCompat.Builder(this, getPackageName());
builder.setContentText("正在上傳視頻")
.setContentTitle("正在上傳")
.setChannelId(channel)//直接加上channelid
.setDefaults(NotificationCompat.DEFAULT_VIBRATE) //懸浮通知設(shè)置
.setPriority(NotificationCompat.PRIORITY_MAX)  //懸浮通知設(shè)置
.setCustomContentView(view)
.setSmallIcon(R.drawable.ic_launcher);
notification = builder.build();
notification.flags = Notification.FLAG_ONGOING_EVENT;//設(shè)置通知欄常駐
mNotificationManager.notify(notifyid,notification); //發(fā)送通知
upload(); //開始上傳
return super.onStartCommand(intent, flags, startId);
}

打開server直接發(fā)送一個Notification并拿到RemoteViews ;
這里要兼容下8.0設(shè)置好渠道id;
下面開始上傳

void upload() {
//首先看下是否還有待上傳的文件,沒有了就直接關(guān)閉通知和服務(wù)
        if (paths == null || paths.size() == 0) {
            mNotificationManager.cancel(notifyid);
            stopSelf();
            return;
        }
        //設(shè)置下初始的下載狀態(tài)
        view.setProgressBar(R.id.progress, 100, 0, false);
        view.setTextViewText(R.id.tv_title, "正在上傳" + paths.get(0));
      
//這是用來上傳騰訊云的方法,可以替換成自己上傳/下載的方法
        putObjectSample.startAsync(new PutObjectSample.AsyncCallBack() {
            @Override
            public void onSuccessCall(CosXmlRequestBean cosXmlRequestBean) {
             //上傳成功繼續(xù)調(diào)用  upload();方法判斷是否需要上傳
                upload();
            }

            @Override
            public void onFail(String fail) {
                //上傳失敗就直接關(guān)掉,可以發(fā)個toast提示下
                mNotificationManager.cancel(notifyid);
                stopSelf();
            
            }
        }, new CosXmlProgressListener() {
            @Override
            public void onProgress(long l, long l1) {
                int result = (int) (l * 100.0 / l1);//進度
                //設(shè)置進度條   
                view.setProgressBar(R.id.progress, 100, result, false);
                mNotificationManager.notify(notifyid, notification);//更新進度條
                

            }
        });
        paths.remove(0);//再把當(dāng)前上傳的地址從列表刪除
    }

最后效果如圖,layout可以自己定義
如果無法顯示通知那應(yīng)該安裝時默認設(shè)置了關(guān)閉通知,需要進入通知管理打開

image.png

image.png

image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 01 我崇拜母親這一身份,我敬仰母愛。 如果演講,倘若涉及母愛我必定哭得稀里嘩啦,因為母親孕育了生命。 啊!多么神...
    9e088e4d758a閱讀 667評論 8 9
  • 愛出者愛返,福往者福來。 -禪語 你把愛給了他人,別人也會以愛回報你; 你給別人帶去了福音,別人也會給你...
    Ceeci閱讀 303評論 0 0
  • 有人認為一寸光陰一寸金,但是,沒有思考與空無的人生真的值得過嗎? 你催,我寫不出好文;你催,你認為節(jié)省了時間。 只...
    果果丘吉爾閱讀 557評論 1 1
  • 我認為這節(jié)課最重要的三個部分是:―:首先對我們每個學(xué)生的自我心理測試。―:其次是為了這學(xué)期的心理課給我們進行了分組...
    杏爾閱讀 381評論 0 1
  • 人與人比的是合作的能力。 沒有人能獨立存在,如家庭如企業(yè) 但凡合作必有博弈。 合作的兩個敏感點,1自由度2控制力 ...
    寧靜的夏天陪你看海閱讀 421評論 0 1

友情鏈接更多精彩內(nèi)容