我正在尝试从服务更新进度条。我不知道这是否是正确的方法,但我必须这样做。在服务中,我正在尝试上传图像,它将返回通知栏的进度。现在,我想添加一个进度条作为指示器,并删除通知栏中的通知。
这些是我用来调用进度条的代码
LayoutInflater inflater = (LayoutInflater) getApplicationContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = inflater.inflate(R.layout.fragment_doc, null);
progressBar = (ProgressBar) v.findViewById(R.id.imgProgressBar);
它不会返回任何错误,但是当我尝试更新进度栏时
progressBar.setProgress(progress(
什么都没发生..我该怎么办,我的代码有什么问题吗?
将不胜感激任何意见。谢谢
进度条不是正确的方法...您应该使用广播接收器根据服务更新您的活动或片段
从服务,你应该发送广角广播
Intent broadcastIntent = new Intent();
broadcastIntent.setAction(ACTION_NAME);
sendBroadcast(broadcastIntent);
对于活动或狂热
private MyBroadRequestReceiver receiver;
在创建
IntentFilter filter = new IntentFilter(ACTION_NAME);
receiver = new MyBroadRequestReceiver();
registerReceiver( receiver, filter);
和
@Override
public void onDestroy() {
this.unregisterReceiver(receiver);
super.onDestroy();
}
在要更新进度条的活动或片段中
public class MyBroadRequestReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
//update your progressbar here
}
}
服务没有 UI
所以如果你想在服务和UI(活动(之间进行通信
你应该使用BroadCast
在您的服务中,您可以添加此
Intent intent = new Intent("Actionname");
intent.putExtra("....",.......);
intent.putExtra(".",...);
LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(intent);
和在您的活动中
private class BroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equalsIgnoreCase("reciverlocation"))
{ // what you wane to do
}}
并且不要忘记在清单中添加接收器
如果您的活动正在运行,您可以使用相同的interface
-
第 1 步:在service
中定义接口 -
public interface OnProgressUpdateListener {
void onProgressUpdate(int progress);
}
第 2 步:为侦听器创建 setter -
private static OnProgressUpdateListener progressListener;
public static void setOnProgressChangedListener(OnProgressUpdateListener _listener) {
progressListener = _listener;
}
第 3 步:将listener
实施到您的"活动中">
MyService.setOnProgressChangedListener(this);
@Override
public void onProgressUpdate(int progress) {
// Do update your progress...
}
PS,不要忘记将其设置为null
..因为它是static
@Override
public void onDestroy() {
super.onDestroy();
MyService.setOnProgressChangedListener(null);
}