Android LocalBroadcastManager多次发送数据

Android LocalBroadcastManager多次发送数据,android,android-fragments,android-intent,android-broadcast,android-broadcastreceiver,Android,Android Fragments,Android Intent,Android Broadcast,Android Broadcastreceiver,我有一个片段,当用户输入链接并点击按钮时,会启动一个服务,该服务处理链接并抓取url上的任何图像或视频 但我的问题是,同样的东西被下载了不止一次,比如2到3次。。 这是片段- public class FragmentTwo extends Fragment { FloatingActionButton btn; EditText et1; String profilname; ProgressDialog pd; private ArrayList<Long> mDownload

我有一个片段,当用户输入链接并点击按钮时,会启动一个服务,该服务处理链接并抓取url上的任何图像或视频

但我的问题是,同样的东西被下载了不止一次,比如2到3次。。 这是片段-

public class FragmentTwo extends Fragment {

FloatingActionButton btn;
EditText et1;
String profilname;
ProgressDialog pd;
private ArrayList<Long> mDownloadIds = new ArrayList<>();



    public FragmentTwo() {
        // Required empty public constructor
    }
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        // Inflate the layout for this fragment
         View rootView = inflater.inflate(R.layout.fragment_two,container, false);

getActivity().registerReceiver(onComplete, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));
        LocalBroadcastManager.getInstance(getActivity())
            .registerReceiver(myReceiver, new IntentFilter(Constants.BROADCAST_ACTION));


FloatingActionButton btn = (FloatingActionButton) rootView.findViewById(R.id.button1);
    EditText et1 = (EditText) rootView.findViewById(R.id.editText1);


 pd = new ProgressDialog(getActivity());
        pd.setMessage("Let us Check");
        pd.setIndeterminate(true);
        pd.setCancelable(false);
        pd.setCanceledOnTouchOutside(false);

btn.setOnClickListener(new OnClickListener() {              
@Override               
public void onClick(View v) { 
EditText et1 = (EditText)

getView().findViewById(R.id.editText1); 
profilname = et1.getText().toString();

((InputMethodManager) getActivity().getSystemService("input_method"))                   .hideSoftInputFromWindow(et1.getWindowToken(), 0);                  

profilname.replace("https://www.instagram.com/","https://instagram.com/");

if (profilname.trim().equals("")){ 
Toast.makeText(getActivity(), "Link is Blank!", 0) 

.show(); 
}

else if(isNetworkAvailable()){

Toast.makeText(getActivity(), profilname, 0) 
.show(); 
    DownloaderService.startActionFoo(getActivity(), profilname);
pd.show();
}

else{
Toast.makeText(getActivity(), "Network Error", 0) 
.show(); 
}
}       
    });



return rootView;
    }

    private boolean isNetworkAvailable() {
     ConnectivityManager connectivityManager = (ConnectivityManager) getActivity().getSystemService(Context.CONNECTIVITY_SERVICE );
     NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
     return activeNetworkInfo != null && activeNetworkInfo.isConnected();
    }


    private BroadcastReceiver myReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            ContentValues contentValues = intent.getParcelableExtra(Constants.MEDIA_INFO);
            String mediaUrl = contentValues.getAsString(Constants.MEDIA_URL);
            String mediaName = contentValues.getAsString(Constants.MEDIA_NAME);
            pd.dismiss();
            download(mediaUrl, mediaName);

            EditText et1 = (EditText)

getView().findViewById(R.id.editText1); 
et1.setText("");
        }
    };

    private BroadcastReceiver onComplete = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            long enqueueId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
            if (mDownloadIds.contains(enqueueId)) {
               /* if (mBtnDownload.getVisibility() == View.VISIBLE) {
                    mBtnDownload.setVisibility(View.GONE);
                }*/
                getActivity().getLoaderManager().getLoader(0);
            }
        }
    };


    public void onDestroy() {
        LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(myReceiver);
        getActivity().unregisterReceiver(onComplete);
        super.onDestroy();
    }

    private void download(String url, String fileName) {

        File root = Environment.getExternalStorageDirectory();
        File myDir = new File(root + "/MCD/");
        myDir.mkdirs();

           DownloadManager mDownloadManager = (DownloadManager) getActivity().getSystemService(getActivity().DOWNLOAD_SERVICE);
        if (!doesRequestExist(mDownloadManager, url)) {
           /* boolean allowedOverMetered = mSettings.getBoolean(PREF_KEY_NETWORK, true);*/
            int networkType = NETWORK_WIFI | NETWORK_MOBILE;
        /*    if (allowedOverMetered) {
                networkType = NETWORK_WIFI | NETWORK_MOBILE;
            }*/
            DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
            request.setTitle(fileName);
            request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
            request.setDestinationInExternalPublicDir(root + "/MCD/", fileName);
            request.setAllowedNetworkTypes(networkType);

            long id = mDownloadManager.enqueue(request);
            mDownloadIds.add(id);
        }
    }

    private boolean doesRequestExist(DownloadManager downloadManager, String url) {
        boolean result = false;
        DownloadManager.Query query = new DownloadManager.Query();
        query.setFilterByStatus(DownloadManager.STATUS_SUCCESSFUL
            | DownloadManager.STATUS_PENDING
            | DownloadManager.STATUS_RUNNING);
        Cursor cursor = downloadManager.query(query);
        while (cursor.moveToNext()) {
            int uriIndex = cursor.getColumnIndex(DownloadManager.COLUMN_URI);
            String uri = cursor.getString(uriIndex);
            if (uri.equals(url)) {
                result = true;
                break;
            }
        }
        cursor.close();
        return result;
    }

    }
&常数-

public final class Constants {
    public static final String BROADCAST_ACTION = "com.parrotainment.media.downloader.BROADCAST";
    public static final String MEDIA_INFO = "com.parrotainment.media.downloader.MEDIA_INFO";
    public static final String MEDIA_NAME = "com.parrotainment.media.downloader.MEDIA_NAME";
    public static final String MEDIA_URL = "com.parrotainment.media.downloader.MEDIA_URL";
}

只需检查oReceive中的数据可能会有所帮助。像这样:

if(intent.getAction() != null && intent.getAction().equals("your_constant_item")){
//
}

已尝试在onResume()方法中注册您的接收器。您应该在onDeatch上注销广播接收器,而不是在onDestroye上注销。@SachinRao如果我使用它,我会崩溃onResume@HimeshGoswami仍然相同:(
if(intent.getAction() != null && intent.getAction().equals("your_constant_item")){