android使用接口和广播传输数据

实现效果图:

android使用接口和广播传输数据效果图很简单,但是我们实现的效果很重要,是在项目里经常使用的技术,可以很好处理数据在不同界面的刷新处理,全局值的传递,多多使用interface和广播,可以让你的项目少做大量的逻辑处理,提高开发的效率

第一:主界面的效果,因为我这是一个测试案例,所以代码写的比较简单,主要是主界面的两个按钮,第一个按钮,点击出现dialogfragment弹框,然后点击第二个按钮跳转到另一个界面,在主界面创建广播,包括广播的接收和代码动态注册广播,动态注册的广播方便管理,在onreceiver方法里,接收发送过来的广播,根据我们接收到的广播消息,来处理我们的功能逻辑。

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.ConnectivityManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {
    private Button button,button_intent;
    private SoundFragment soundFragment;
    private CHS_Broad_BroadcastReceiver mCHS_Broad_Receiver;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        IntentFilter filter = new IntentFilter();
        filter.addAction("android.intent.action.CHS_Broad_BroadcastReceiver");
        mCHS_Broad_Receiver = new CHS_Broad_BroadcastReceiver();
        //注册广播接收
        registerReceiver(mCHS_Broad_Receiver,filter);

        button = (Button)findViewById(R.id.button);
        button_intent= (Button)findViewById(R.id.button_intent);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                showDialogFragment();
            }
        });
        button_intent.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent  = new Intent(getApplicationContext(),TextActivity.class);
                startActivity(intent);
                DataStruct.isdialog = false;
            }
        });

    }

    private void showDialogFragment() {
        if(soundFragment == null){
            soundFragment = new SoundFragment();
        }
        if(!soundFragment.isAdded()){
           soundFragment.show(getSupportFragmentManager(),"soundFragment");
        }
        soundFragment.OnSetOnClickDialogListener(new SoundFragment.SetOnClickDialogListener() {
            @Override
            public void OnClickDialogListener(int val, boolean isCheck) {
                Log.e("TAG","选择了:"+val+"---"+isCheck);
            }
        });

    }


    public class CHS_Broad_BroadcastReceiver extends BroadcastReceiver{

        @Override
        public void onReceive(Context context, Intent intent) {
            String msg = intent.getExtras().get("msg").toString();

            if(msg.equals(DataStruct.BoardCast_BOOTING_SOUND)){
                Log.e("TAG","BroadcastReceiver--选2择了:"+msg);
                //        showDialogFragment(); //出现音源选择弹框
                DataStruct.isdialog = true;
            }
        }
    }

    @Override
    protected void onResume() {
        super.onResume();
        if(DataStruct.isdialog){
            showDialogFragment();
        }

    }
}

第二个:dialogfragment弹框  这个界面很简单,大家主要学习一下这个类的,interface类的应用,以后我们在很多自定义的控件都可以添加接口,然后在主界面去调用我们创建的接口,这个接口可以处理事件监听和界面的数据交互,非常的简单快捷,而且功能很稳定,学会了接口,让你的项目处理更加简单

import android.content.Context;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.DialogFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;

/**
 * Created by Administrator on 2018\11\8 0008.
 */

public class SoundFragment extends DialogFragment {
    private final static int MAX_BTN = 4;
    private Button[] btn = new Button[MAX_BTN];
    private Context mContext;
    public interface SetOnClickDialogListener{
        void OnClickDialogListener(int val,boolean isCheck);
    }
    public SetOnClickDialogListener mSetOnClickDialogListener;
    public void OnSetOnClickDialogListener(SetOnClickDialogListener listener){
        this.mSetOnClickDialogListener = listener;
    }


    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view  = LayoutInflater.from(getActivity()).inflate(R.layout.sound_fragment,null);
        mContext = getActivity();
        initView(view);

        return view;
    }

    private void initView(View view) {
        btn[0] = (Button)view.findViewById(R.id.button2);
        btn[1] = (Button)view.findViewById(R.id.button3);
        btn[2] = (Button)view.findViewById(R.id.button4);
        btn[3] = (Button)view.findViewById(R.id.button5);
        for(int i=0;i<MAX_BTN;i++){
            btn[i].setTag(i);
            btn[i].setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    int val = (int) view.getTag();
                    if(mSetOnClickDialogListener != null){
                        mSetOnClickDialogListener.OnClickDialogListener(val,true);
                    }
                    getDialog().dismiss(); //去除对话框
                }
            });


        }
 
    }
}

第三个界面:广播发送器,很多同学可能觉得广播发送器很难,其实广播和handler差不多,都是用来发送和接收广播消息的,主界面方法接收,我们这里使用intent来发送广播,把我们的一个参数传递过去,主界面接收参数,然后进行判断

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

/**
 * Created by Administrator on 2018\11\8 0008.
 */

public class TextActivity extends Activity {
    private Button button6;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_text);
        button6 = (Button)findViewById(R.id.button6);

        button6.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent1=new Intent();
                intent1.setAction("android.intent.action.CHS_Broad_BroadcastReceiver");
                intent1.putExtra("msg", DataStruct.BoardCast_BOOTING_SOUND);
                sendBroadcast(intent1);
                finish();
            }
        });

    }
}

第四个:全局的一个类,主要用于临时存储一些全局的临时数据,建议大家养成一个良好的代码习惯,把一些多次用到的变量,数组都放在一个通用类里面进行统一管理。这样做提高的代码的效率和代码可读性,并且有利于项目的后期维护和代码修改

public class DataStruct {
    public static final String BoardCast_BOOTING_SOUND="BoardCast_BOOTING_SOUND";
    public static  boolean isdialog = false;  //true表示出现弹框
}

写到这里,基本结束了,我们实现了广播和接口的简单使用的demo,需要灵活运用