android - 如何在 Intent Service 中获取 Activity

标签 android android-intent intentservice

我想在意向服务中获得 Activity 。在 Intent 服务中,向列表控件填充数据。 当我在 FloatSomeService(IntentService) 中调用 DictionaryListAdapter 时,没有 Activity 。
(FloatSomeService.java) 服务

 public void onCreate() {
    // TODO Auto-generated method stub
    super.onCreate();   
    windowManager = (WindowManager)getSystemService(WINDOW_SERVICE);
    // Find Controls
    LayoutInflater inflater = LayoutInflater.from(this);        
    viewFloat = inflater.inflate(R.layout.float_view, null);        
    listview = (ListView)viewFloat.findViewById(R.id.listDic);  
    this.generateData();

    // *** Error : When create adapter, get activity from base context *** //
    myAdapter = new DictionaryListAdapter((Activity)getBaseContext(), myListItem);

    listview.setAdapter(myAdapter);
    ......................
    windowManager.addView(viewFloat, parameters);
}

(DictionaryListAdapter.java)

public class DictionaryListAdapter extends BaseAdapter{
private Activity myContext;
private ArrayList<HistoryListItem> myItems;
public DictionaryListAdapter(Activity activity, ArrayList<DictionaryListItem> items){
    this.myContext = activity;
    this.myList = items;
}

public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    if (convertView == null) {
        LayoutInflater layoutInflater = this.myContext.getLayoutInflater();
        convertView = layoutInflater.inflate(R.layout.history_list_item, null);
    }
    ImageView imgPerson = (ImageView)convertView.findViewById(R.id.imgPerson);
    ...........................
}}

最佳答案

使用广播通知将数据从服务传递到 Activity ,并在收到广播通知时更新 Activity 中的 View 。

比如在服务类中定义一个braoadcast通知函数,

public void sendBroadcastNotification(Bundle extras) {
        if (CoreApplication.DEBUG)
            Log.d(TAG, "Sending broadcast notification" + mIntentMsgId);
        Intent intentBroadcast = new Intent(BROADCAST_MESSAGE_NAME);
        intentBroadcast.putExtra(CoreConstants.EXTRA_INTENT_MSG_ID,
                mIntentMsgId);

        sendBroadcast(intentBroadcast);
    }

并在服务类中像这样设置通知

sendBroadcastNotification(extras)

在您的 Activity 中定义接收器类

private BroadcastReceiver gpsBRec = new BroadcastReceiver() {

        @Override
        public void onReceive(Context context, Intent intent) {

           //Implement UI change code here once notification is received
      }
}

在activity类中,在onResume()中注册接收者,在onStop()中注销接收者

@Override
    public void onStop() {
        super.onStop();
        try {
            unregisterReceiver(gpsBRec);
        } catch (IllegalArgumentException e) {

        }

    }



@Override
    public void onResume() {
        super.onResume();

        registerReceiver(gpsBRec, new IntentFilter(
                RetrieveLastTrackDBService.BROADCAST_MESSAGE_NAME));


    }

关于android - 如何在 Intent Service 中获取 Activity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22602781/

相关文章:

android - 如何从日历中获取与会者的电子邮件或姓名

java - 如何在应用程序中的 Activity 之间添加几秒钟的延迟?

android - 我可以强制我的应用程序启动默认相机而不是提供 'Complete action using' 列表吗?

Android停止指定的IntentService

android - 找不到图像的相对/本地目录 - React Native

android - 如何修复 variant.getMergeResources()

java - 如何从 Arraylist 填充 AlertDialog?

android - 将带有名称值对的数组列表从一个 Activity 传递到另一个 Activity ?

android - 如何强制停止正在进行的 Intent Service?

android - 如何等待 IntentService 完成其任务