- **
广播数据写入界面
**
第一步,我们先在activity_main.xml中添加一个TextView布局,用于显示数据。
代码如下
添加一个简单的TextView布局即可。
第二步,在自己的广播类中,定义一个内部接口
代码如下,接口名可以自己定义
interface DaiLi{
}
第三步,在主程序MainActivity.java中,实现这个接口
第四步,在自己定义的广播类Myguanbo中,创建一个类,用于传送自己的数据
类名可以自己定义,这里要注意使用权限,因为MainActivity中要用到这个类
第五步,在MainActivity.java中将this传入到广播类中定义的成员数据中
代码如下:
第六步,在主程序,MainActivity.java中,得到TextView的控件
代码如下:
tv1 = findViewById(R.id.textView);
第七步,在广播类,内部接口中,写一个写入数据的方法
代码如下:
interface DaiLi{
void xieru(String s);
}
第八步,在主程序,MainActivity.java中,重写接口的写入数据方法
代码如下:
@Override
public void xieru(String s) {
}
第九步,在主程序,MainActivity.java中,在重写xieru方法中,把数据给TextView控件显示
因为,一开始,我们得到TextView控件的时候,是定义的局部的,这里直接调用,是会报错的,所以我们要先把TextView控件定义成全局的
这个时候,我们再去xieru方法里面,把数据传进去。
@Override
public void xieru(String s) {
tv1.setText(s);
}
效果如下:
第十步,在自己的广播类中,调用,xieru这个方法
这里,我们要调用接口里面的方法,先要创建一个接口实例,并且需要把这个实例,定义成全局的,因为,下面的步骤,我们需要用到它。
首先,我们创建一个全局的接口实例,
private DaiLi daiLi;
效果如下:
然后,在调用xieru方法,
daiLi.xieru();
第十一步,修改chuangShongZiJi()的方法
这时候,chuangShongZiJi( )方法中的参数d就等于daiLi,把主程序中的值,给接口。
代码如下:
public void chuangShongZiJi(DaiLi d){
daiLi=d;
}
效果如下:
第十二步,得到主程序传的字符串
你要自己定义一个字符串,用于得到,主程序的"xigua"字符串里的值,
代码如下:
String str = intent.getStringExtra("xigua");
最后在把这个字符串写入到界面tv1中,把字符串“str”给刚刚调用的写入方法。
代码如下:
daiLi.xieru(str);
现在代码就写完啦!我们来看一下效果
完整代码
Myguanbo.java代码
package com.example.myapplication_10;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.TextView;
import android.widget.Toast;
/**
* @author QiuSiQi
* @package com.example.myapplication_200402
* @fileName Myguanbo
* @date on 2020/4/2 9:24
* @describe TODO
*/
public class Myguanbo extends BroadcastReceiver {
private DaiLi daiLi;
@Override
public void onReceive(Context context, Intent intent) {
String str = intent.getStringExtra("xigua");
//Toast.makeText(context,str,Toast.LENGTH_SHORT).show();
//写入界面TV中
daiLi.xieru(str);
}
//定义一个内部接口
interface DaiLi{
void xieru(String s);
}
public void chuangShongZiJi(DaiLi d){
daiLi=d;
}
}
MainActivity.java代码
package com.example.myapplication_10;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity implements Myguanbo.DaiLi{
private Myguanbo gb;
private TextView tv1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//选台,注册广播
gb = new Myguanbo();
IntentFilter intentFilter = new IntentFilter("nanChang");
registerReceiver(gb,intentFilter);
gb.chuangShongZiJi(this);
tv1 = findViewById(R.id.textView);
Button btn1= findViewById(R.id.button);
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//发送广播
Intent intent = new Intent("nanChang");
intent.putExtra("xigua","6.5");
intent.setPackage("com.example.myapplication_10");
sendBroadcast(intent);
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(gb);
}
@Override
public void xieru(String s) {
tv1.setText(s);
}
}
布局代码,activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:text="发送广播"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="297dp"
android:text="TextView"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>