科技网站域名,wordpress图片文章,百度贴吧营销,东莞网站制作十年乐云seo网上有直接引用support-v4包的#xff0c;但我用的AndroidX#xff0c;不能为这个类再引用support-v4 直接自己创建这个类#xff0c;把androidx.localbroadcastmanager.content.LocalBroadcastManager改改就行。 虽然奇葩但能解决问题
package android.support.v4.content…网上有直接引用support-v4包的但我用的AndroidX不能为这个类再引用support-v4 直接自己创建这个类把androidx.localbroadcastmanager.content.LocalBroadcastManager改改就行。 虽然奇葩但能解决问题
package android.support.v4.content;import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.Uri;
import android.os.Handler;
import android.os.Message;
import android.util.Log;import androidx.annotation.NonNull;import java.util.ArrayList;
import java.util.HashMap;
import java.util.Set;/*** Helper to register for and send broadcasts of Intents to local objects* within your process. This has a number of advantages over sending* global broadcasts with {link android.content.Context#sendBroadcast}:* ul* li You know that the data you are broadcasting wont leave your app, so* dont need to worry about leaking private data.* li It is not possible for other applications to send these broadcasts to* your app, so you dont need to worry about having security holes they can* exploit.* li It is more efficient than sending a global broadcast through the* system.* /ul*/
public final class LocalBroadcastManager {private static final class ReceiverRecord {final IntentFilter filter;final BroadcastReceiver receiver;boolean broadcasting;boolean dead;ReceiverRecord(IntentFilter _filter, BroadcastReceiver _receiver) {filter _filter;receiver _receiver;}Overridepublic String toString() {StringBuilder builder new StringBuilder(128);builder.append(Receiver{);builder.append(receiver);builder.append( filter);builder.append(filter);if (dead) {builder.append( DEAD);}builder.append(});return builder.toString();}}private static final class BroadcastRecord {final Intent intent;final ArrayListReceiverRecord receivers;BroadcastRecord(Intent _intent, ArrayListReceiverRecord _receivers) {intent _intent;receivers _receivers;}}private static final String TAG LocalBroadcastManager;private static final boolean DEBUG false;private final Context mAppContext;private final HashMapBroadcastReceiver, ArrayListReceiverRecord mReceivers new HashMap();private final HashMapString, ArrayListReceiverRecord mActions new HashMap();private final ArrayListBroadcastRecord mPendingBroadcasts new ArrayList();static final int MSG_EXEC_PENDING_BROADCASTS 1;private final Handler mHandler;private static final Object mLock new Object();private static android.support.v4.content.LocalBroadcastManager mInstance;NonNullpublic static android.support.v4.content.LocalBroadcastManager getInstance(NonNull Context context) {synchronized (mLock) {if (mInstance null) {mInstance new android.support.v4.content.LocalBroadcastManager(context.getApplicationContext());}return mInstance;}}private LocalBroadcastManager(Context context) {mAppContext context;mHandler new Handler(context.getMainLooper()) {Overridepublic void handleMessage(Message msg) {switch (msg.what) {case MSG_EXEC_PENDING_BROADCASTS:executePendingBroadcasts();break;default:super.handleMessage(msg);}}};}/*** Register a receive for any local broadcasts that match the given IntentFilter.** param receiver The BroadcastReceiver to handle the broadcast.* param filter Selects the Intent broadcasts to be received.** see #unregisterReceiver*/public void registerReceiver(NonNull BroadcastReceiver receiver,NonNull IntentFilter filter) {synchronized (mReceivers) {ReceiverRecord entry new ReceiverRecord(filter, receiver);ArrayListReceiverRecord filters mReceivers.get(receiver);if (filters null) {filters new ArrayList(1);mReceivers.put(receiver, filters);}filters.add(entry);for (int i0; ifilter.countActions(); i) {String action filter.getAction(i);ArrayListReceiverRecord entries mActions.get(action);if (entries null) {entries new ArrayListReceiverRecord(1);mActions.put(action, entries);}entries.add(entry);}}}/*** Unregister a previously registered BroadcastReceiver. emAll/em* filters that have been registered for this BroadcastReceiver will be* removed.** param receiver The BroadcastReceiver to unregister.** see #registerReceiver*/public void unregisterReceiver(NonNull BroadcastReceiver receiver) {synchronized (mReceivers) {final ArrayListReceiverRecord filters mReceivers.remove(receiver);if (filters null) {return;}for (int ifilters.size()-1; i0; i--) {final ReceiverRecord filter filters.get(i);filter.dead true;for (int j0; jfilter.filter.countActions(); j) {final String action filter.filter.getAction(j);final ArrayListReceiverRecord receivers mActions.get(action);if (receivers ! null) {for (int kreceivers.size()-1; k0; k--) {final ReceiverRecord rec receivers.get(k);if (rec.receiver receiver) {rec.dead true;receivers.remove(k);}}if (receivers.size() 0) {mActions.remove(action);}}}}}}/*** Broadcast the given intent to all interested BroadcastReceivers. This* call is asynchronous; it returns immediately, and you will continue* executing while the receivers are run.** param intent The Intent to broadcast; all receivers matching this* Intent will receive the broadcast.** see #registerReceiver** return Returns true if the intent has been scheduled for delivery to one or more* broadcast receivers. (Note tha delivery may not ultimately take place if one of those* receivers is unregistered before it is dispatched.)*/public boolean sendBroadcast(NonNull Intent intent) {synchronized (mReceivers) {final String action intent.getAction();final String type intent.resolveTypeIfNeeded(mAppContext.getContentResolver());final Uri data intent.getData();final String scheme intent.getScheme();final SetString categories intent.getCategories();final boolean debug DEBUG ||((intent.getFlags() Intent.FLAG_DEBUG_LOG_RESOLUTION) ! 0);if (debug) Log.v(TAG, Resolving type type scheme scheme of intent intent);ArrayListReceiverRecord entries mActions.get(intent.getAction());if (entries ! null) {if (debug) Log.v(TAG, Action list: entries);ArrayListReceiverRecord receivers null;for (int i0; ientries.size(); i) {ReceiverRecord receiver entries.get(i);if (debug) Log.v(TAG, Matching against filter receiver.filter);if (receiver.broadcasting) {if (debug) {Log.v(TAG, Filters target already added);}continue;}int match receiver.filter.match(action, type, scheme, data,categories, LocalBroadcastManager);if (match 0) {if (debug) Log.v(TAG, Filter matched! match0x Integer.toHexString(match));if (receivers null) {receivers new ArrayListReceiverRecord();}receivers.add(receiver);receiver.broadcasting true;} else {if (debug) {String reason;switch (match) {case IntentFilter.NO_MATCH_ACTION: reason action; break;case IntentFilter.NO_MATCH_CATEGORY: reason category; break;case IntentFilter.NO_MATCH_DATA: reason data; break;case IntentFilter.NO_MATCH_TYPE: reason type; break;default: reason unknown reason; break;}Log.v(TAG, Filter did not match: reason);}}}if (receivers ! null) {for (int i0; ireceivers.size(); i) {receivers.get(i).broadcasting false;}mPendingBroadcasts.add(new BroadcastRecord(intent, receivers));if (!mHandler.hasMessages(MSG_EXEC_PENDING_BROADCASTS)) {mHandler.sendEmptyMessage(MSG_EXEC_PENDING_BROADCASTS);}return true;}}}return false;}/*** Like {link #sendBroadcast(Intent)}, but if there are any receivers for* the Intent this function will block and immediately dispatch them before* returning.*/public void sendBroadcastSync(NonNull Intent intent) {if (sendBroadcast(intent)) {executePendingBroadcasts();}}SuppressWarnings(WeakerAccess) /* synthetic access */void executePendingBroadcasts() {while (true) {final BroadcastRecord[] brs;synchronized (mReceivers) {final int N mPendingBroadcasts.size();if (N 0) {return;}brs new BroadcastRecord[N];mPendingBroadcasts.toArray(brs);mPendingBroadcasts.clear();}for (int i0; ibrs.length; i) {final BroadcastRecord br brs[i];final int nbr br.receivers.size();for (int j0; jnbr; j) {final ReceiverRecord rec br.receivers.get(j);if (!rec.dead) {rec.receiver.onReceive(mAppContext, br.intent);}}}}}
}