简体   繁体   English

没有调用BroadcastReceiver的onReceive方法

[英]BroadcastReceiver's onReceive method is not being called

I have a fragment and a service , I want to update UI (listview) of Fragment from service after performing a task so I created a BroadcastReceiver , but onReceive method is not being called.Please suggest. 我有一个片段和一个服务,我想在执行任务后从服务中更新片段的UI(列表视图),所以我创建了BroadcastReceiver,但是没有调用onReceive方法。建议。

here is my code : MyReciever : 这是我的代码:MyReciever:

 public class Myreceiver extends BroadcastReceiver{

            @Override
            public void onReceive(Context context, Intent intent) {
                // TODO Auto-generated method stub
                Log.d("TAG" , "onrecive::");
                refreshView();
            }

        }

onREsume/onPause of fragment : onResume / onPause片段:

@Override
public void onResume() {
    super.onResume();
    Log.d(TAG, tag + " onResume() called");
    Log.d("TAG" , "nibha :: test on resume " +DeliveryOrder.isSyncDone );

    getActivity().registerReceiver(myrec,
            new IntentFilter("com.Mediapp."+tag+".SYNC_FINISH"));

    mDOListAdapter.notifyDataSetChanged();
    Log.d(TAG, tag + " onResume() ended");
}

@Override
public void onPause() {
    super.onPause();
    Log.d(TAG, tag + " onPause called");
    getActivity().unregisterReceiver(myrec);
    Log.d(TAG, tag + " onPause ended");
}

onService: onService:

Log.d("TAG" , "nibha :: test " +DeliveryOrder.isSyncDone );
            Intent in= new Intent();
            in.setAction("com.Mediapp."+tag+".SYNC_FINISH");
            sendBroadcast(in);
            Log.d("nibha", "onHandleIntent: sending broadcast");

Register BroadcastReceiver in Android Manifest. 在Android Manifest中注册BroadcastReceiver

<receiver android:name=".Myreceiver">
        <intent-filter>
            <action android:name="android.intent.action.PHONE_STATE" />
        </intent-filter>
</receiver>

In onResume() method, save a boolean value in SharedPreferences . onResume()方法中,将一个布尔值保存在SharedPreferences

SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor e = settings.edit();

e.putBoolean("action_performed", true);
e.commit();

Now in onReceive() method of BroadcastReceiver check whether action_performed is true or not. 现在,在BroadcastReceiver onReceive()方法中检查action_performed是否为true。 If it is then do what you want to. 如果是,那么您想做什么。

@Override
public void onReceive(Context context, Intent intent) {
    // TODO Auto-generated method stub
    Log.d("TAG" , "onrecive::");

    SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context);
    boolean actionDone = settings.getBoolean("action_performed", false);

    if(actionDone) {
        refreshView();
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM