我正在尝试从服务更新进度条。我不知道这是否正确,但我必须这样做。在服务中,我正在尝试上传图片,它将返回通知栏的进度。现在,我想添加一个进度条作为指标,并在通知栏上删除通知。
这些是我用来调用ProgressBar的代码
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时progressBar.setProgress(进度)
什么都没发生..我该怎么做,我的代码有什么问题吗?
将欣赏任何输入。感谢
答案 0 :(得分:5)
更新你的进度条不正确... 您应该使用广播接收器根据服务更新您的活动或片段
从服务中你应该发送广播
Intent broadcastIntent = new Intent();
broadcastIntent.setAction(ACTION_NAME);
sendBroadcast(broadcastIntent);
For Activity或Framgent
private MyBroadRequestReceiver receiver;
on onCreate
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
}
}
答案 1 :(得分:1)
如果您的活动正在运行,您可以使用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);
}
答案 2 :(得分:1)
服务没有用户界面 所以,如果你想在服务和用户界面(活动)之间进行沟通
你应该使用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
}}
并且不要忘记在清单中添加Receiver