自定义广播接收不到
public class MainActivity extends AppCompatActivity { private static final String TAG = "MainActivity"; public static final String MY_ACTION = "com.imooc.demo.adcdefg"; public static final String CONTENT = "broadcast_content"; private ImoocBroadcastReceiver broadcastReceiver; private EditText editText; private Button btn; private TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); broadcastReceiver = new ImoocBroadcastReceiver(textView); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(Intent.ACTION_PACKAGE_REMOVED); intentFilter.addAction(Intent.ACTION_PACKAGE_INSTALL); intentFilter.addDataScheme("package"); intentFilter.addAction(Intent.ACTION_SCREEN_ON); intentFilter.addAction(Intent.ACTION_SCREEN_OFF); //自定义一个广播,加入到接收器 intentFilter.addAction(MY_ACTION); registerReceiver(broadcastReceiver, intentFilter); Log.d(TAG,"设置监听器"); setEvents(); } private void setEvents() { btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.d(TAG,"点击按钮了"); Intent intent=new Intent(MY_ACTION); intent.putExtra(CONTENT,editText.getText().toString()); sendBroadcast(intent); Log.d(TAG,"广播发送了"); } }); } private void init() { editText = findViewById(R.id.et_broadcast_content); btn = findViewById(R.id.btn_send_broadcast); textView = findViewById(R.id.tv_received_broadcast); } @Override protected void onDestroy() { super.onDestroy(); if (broadcastReceiver != null) { unregisterReceiver(broadcastReceiver); } } }
ImoocBroadcastReceiver
public class ImoocBroadcastReceiver extends BroadcastReceiver { TextView textView; public ImoocBroadcastReceiver() { } public ImoocBroadcastReceiver(TextView textView) { this.textView = textView; } private static final String TAG = "ImoocBroadcastReceiver"; @Override public void onReceive(Context context, Intent intent) { Log.d(TAG, "触发接收器了"); if (intent != null) { Log.d(TAG, "进入接收器消息处理了"); String action = intent.getAction(); Log.d(TAG, "广播接收器信息:" + action); if (TextUtils.equals(action, MainActivity.MY_ACTION)) { if (textView != null) { String content = intent.getStringExtra(MainActivity.CONTENT); textView.setText("接收到的action是:" + action + "\n接收到的内容是:\n" + content); } } } } }
manifest
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="com.imooc.broadcastreceiverdemo"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" tools:ignore="GoogleAppIndexingWarning"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name=".ImoocBroadcastReceiver" > <!--<intent-filter>--> <!--<!–应用安装 –>--> <!--<action android:name="android.intent.action.PACKAGE_INSTALL"/>--> <!--<!–应用卸载 –>--> <!--<action android:name="android.intent.action.PACKAGE_REMOVED"/>--> <!--<!–指定数据类型 –>--> <!--<data android:scheme="package"/>--> <!--<!–连接充电器 –>--> <!--<action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>--> <!--<!–断开充电器 –>--> <!--<action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>--> <!--<!–充电完成 –>--> <!--<action android:name="android.intent.action.BATTERY_OKAY"/>--> <!--<!–电量低 –>--> <!--<action android:name="android.intent.action.BATTERY_LOW"/>--> <!--<!–开机启动 –>--> <!--<action android:name="android.intent.action.BOOT_COMPLETED"/>--> <!--</intent-filter>--> </receiver> </application> </manifest>
3
收起
正在回答
3回答
1)你把addDataScheme()删除掉就可以收到自定义的广播了。如果加上的话,是要求广播中还要有DataScheme并且符合你的规则。2)但是例如删除APP这个系统广播,如果你不带addDataScheme()则会接收不到这个系统广播。3)要想两者都接收到,你就需要定义多个广播接收器了。祝:学习愉快
D许咚
2019-05-16 19:33:00
xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout 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" android:orientation="vertical" tools:context=".MainActivity" android:layout_marginLeft="10dp" android:layout_marginRight="10dp"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="请输入广播内容:" /> <EditText android:id="@+id/et_broadcast_content" android:layout_width="match_parent" android:layout_height="wrap_content" android:lines="2" /> <Button android:id="@+id/btn_send_broadcast" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:text="发送广播"/> <TextView android:id="@+id/tv_received_broadcast" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="接收到的广播内容:"/> </LinearLayout>
Android数据通信开发与应用2018版
- 参与学习 人
- 提交作业 147 份
- 解答问题 687 个
本专题介绍了Android开发核心组件:广播、服务及全局应用。教会你如何使用AIDL、Thread、Socket、蓝牙解决进程线程间通信问题。利用Glide等实现异步加载及NDK原生代码开发。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星