我有一项服务,用于使用 Http 将一些文件上传到服务器。我想在上传文件时显示进度指示器。最初,我使用 startForeground() 方法在传输过程中显示一个简单的通知。我现在想使用一个进度指示器,就像从 Google Play 商店下载应用程序时显示的那样。我按照http://developer.android.com/guide/topics/ui/notifiers/notifications.html#CustomExpandedView上所示的示例截断
但是在我的服务中实现它会导致 RuntimeException。我的 Service 类中的代码如下:
public int onStartCommand(Intent intent, int flags, int startId) {
Thread myThr = new Thread(new MyThreadClass());
myThr.start();
return START_STICKY;
}
public class SendSelectedNew extends Thread{
public void run(){
try{
if(fileSize()>0){
int fileSize = getSize();
for(int i = 0; i<fileSize;i++){
setNote(sizeOfTheList, i);
startForeground(1339, note);
mNotifyManager.notify(1339, note);
/*Code to upload files to my Server
*/
}
MyService mySer = MyService.this;
mySer.stopForeground(true);
mySer.stopSelf();
}
}catch(Exception e){
if(connection!=null){
connection.disconnect();
}
e.printStackTrace();
}
}
}
public void setNote(int fileSize, int progress){
note = new Notification.Builder(this).setContentText("Sending files").setSmallIcon(R.drawable.sendreceive).setContentTitle("MYApp").setProgress(fileSize, progress, false).build();
note.flags|= Notification.FLAG_NO_CLEAR;
}
我究竟做错了什么?我是否不允许显示服务的进度指示器?我没有在 Logcat 中为我的应用程序获取任何日志,但这就是我在“调试”窗格中得到的
Thread [<1> main] (Suspended (exception RuntimeException))
ActivityThread.handleServiceArgs(ActivityThread$ServiceArgsData) line: 2782
ActivityThread.access$2000(ActivityThread, ActivityThread$ServiceArgsData) line: 152
ActivityThread$H.handleMessage(Message) line: 1385
ActivityThread$H(Handler).dispatchMessage(Message) line: 99
Looper.loop() line: 137
ActivityThread.main(String[]) line: 5328
Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]
Method.invoke(Object, Object...) line: 511
ZygoteInit$MethodAndArgsCaller.run() line: 1102
ZygoteInit.main(String[]) line: 869
NativeStart.main(String[]) line: not available [native method]