本地广播LocalBroadcastManager与Android.support.v4.jar导入
来源:互联网 发布:深圳有名的公司 知乎 编辑:程序博客网 时间:2024/06/05 16:42
发出的广播只能在应用内部进行传递,广播接收器也只能接收程序内部的广播。这样就不存在系统全局广播的安全性问题。
修改BroadcastTest的MainActivity代码:
public class MainActivity extends Activity { private IntentFilter intentFilter; private NetworkChangeReceiver networkChangeReceiver; private LocalReceiver localReceiver; private LocalBroadcastManager localBroadcastManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); localBroadcastManager = LocalBroadcastManager.getInstance(this); Button button = (Button) findViewById(R.id.button); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //Intent intent = new Intent("com.example.broadcasttest.MY_BROADCAST"); Intent intent = new Intent("com.example.broadcasttest." + "LOCAL_BROADCAST"); localBroadcastManager.sendBroadcast(intent); } }); intentFilter = new IntentFilter(); intentFilter.addAction("com.example.broadcasttest.LOCAL_BROADCAST"); localReceiver = new LocalReceiver(); localBroadcastManager.registerReceiver(localReceiver, intentFilter); localBroadcastManager.unregisterReceiver(localReceiver); } class LocalReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "received LOCAL broadcast", Toast.LENGTH_SHORT).show(); } }}
这里还牵扯到一个导入工具包的问题,LocalBroadcastManager需要android-support-v4.jar才能够使用。网上给的解决方法大都是这样的:
首先在Project->properties->Java Build Path->Libraries->Add External Jars中加入sdk目录下的extras/android/support/v4/android-support-v4.jar(如果找不到,则需要 用sdk manager下载android support package)。加入这个jar包之后就可以使用ViewPager类了。
解决问题
但是再运行logcat仍然一大片红:
08-07 02:52:34.234: W/dalvikvm(706): VFY: unable to find class referenced in signature (Landroid/support/v4/content/LocalBroadcastManager;)08-07 02:52:34.344: I/dalvikvm(706): Could not find method android.support.v4.content.LocalBroadcastManager.getInstance, referenced from method com.example.broadcasttest.MainActivity.onCreate08-07 02:52:34.395: W/dalvikvm(706): VFY: unable to resolve static method 12: Landroid/support/v4/content/LocalBroadcastManager;.getInstance (Landroid/content/Context;)Landroid/support/v4/content/LocalBroadcastManager;08-07 02:52:34.395: D/dalvikvm(706): VFY: replacing opcode 0x71 at 0x000808-07 02:52:34.434: I/dalvikvm(706): Could not find method android.support.v4.content.LocalBroadcastManager.unregisterReceiver, referenced from method com.example.broadcasttest.MainActivity.onDestroy08-07 02:52:34.434: W/dalvikvm(706): VFY: unable to resolve virtual method 15: Landroid/support/v4/content/LocalBroadcastManager;.unregisterReceiver (Landroid/content/BroadcastReceiver;)V08-07 02:52:34.474: D/dalvikvm(706): VFY: replacing opcode 0x6e at 0x000708-07 02:52:34.824: D/AndroidRuntime(706): Shutting down VM08-07 02:52:34.824: W/dalvikvm(706): threadid=1: thread exiting with uncaught exception (group=0x409961f8)08-07 02:52:34.834: E/AndroidRuntime(706): FATAL EXCEPTION: main08-07 02:52:34.834: E/AndroidRuntime(706): java.lang.NoClassDefFoundError: android.support.v4.content.LocalBroadcastManager08-07 02:52:34.834: E/AndroidRuntime(706): at com.example.broadcasttest.MainActivity.onCreate(MainActivity.java:33)08-07 02:52:34.834: E/AndroidRuntime(706): at android.app.Activity.performCreate(Activity.java:4465)08-07 02:52:34.834: E/AndroidRuntime(706): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)08-07 02:52:34.834: E/AndroidRuntime(706): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1919)08-07 02:52:34.834: E/AndroidRuntime(706): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980)08-07 02:52:34.834: E/AndroidRuntime(706): at android.app.ActivityThread.access$600(ActivityThread.java:122)08-07 02:52:34.834: E/AndroidRuntime(706): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146)08-07 02:52:34.834: E/AndroidRuntime(706): at android.os.Handler.dispatchMessage(Handler.java:99)08-07 02:52:34.834: E/AndroidRuntime(706): at android.os.Looper.loop(Looper.java:137)08-07 02:52:34.834: E/AndroidRuntime(706): at android.app.ActivityThread.main(ActivityThread.java:4340)08-07 02:52:34.834: E/AndroidRuntime(706): at java.lang.reflect.Method.invokeNative(Native Method)08-07 02:52:34.834: E/AndroidRuntime(706): at java.lang.reflect.Method.invoke(Method.java:511)08-07 02:52:34.834: E/AndroidRuntime(706): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)08-07 02:52:34.834: E/AndroidRuntime(706): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)08-07 02:52:34.834: E/AndroidRuntime(706): at dalvik.system.NativeStart.main(Native Method)08-07 02:52:49.535: I/Process(706): Sending signal. PID: 706 SIG: 9
弄了半天终于发现了原因,你用上边方法导入是,android.supprt.v4.jar是放在了自动创建的一个文件夹Referenced Libraries,这样导入是没有用的。应该手动在项目中创建一个libs文件夹,并把android.supprt.v4.jar粘贴到文件夹中,启动程序——完美。
好了,解决完这个问题,下面分析代码:
可以看出局部广播与动态全局广播类似。只不过现在是通过LocalBroadcastManager的getInstance方法来获取实例,之后加入意图,发送广播。
注册的时候同样使用intentFilter来筛选要接收的广播,然后使用LocalBroadcastManager调用方法registerReceiver来注册。最后用完了之后在onDestroy方法中进行注销。
另外同样需要一个广播接收器内部类,重写他的onReceive方法。
- 本地广播LocalBroadcastManager与Android.support.v4.jar导入
- Android导入android-support-v4.jar
- Support13Demos 导入android-support-v4.jar android-support-v13.jar
- 正确导入android-support-v4.jar的方法
- 正确导入android-support-v4.jar的方法
- android-support-v4.jar的正确导入方法
- 正确导入android-support-v4.jar的方法
- 正确导入android-support-v4.jar的方法
- Android 本地广播LocalBroadcastManager原理分析
- 关于 android-support-v4.jar
- 增加android-support-v4.jar
- LocalBroadcastManager本地广播处理
- LocalBroadcastManager发送本地广播
- Eclipse中导入Android项目后缺失android-support-v4.jar或v7.jar
- 找不到android-support-v4.jar、android-support-v7.jar怎么办?
- Android:混淆排除android-support-v4.jar
- android源码查看 android-support-v4.jar
- android源码查看 android-support-v4.jar
- JDK8 十大新特性详解
- oj:回文字符串处理
- 排序检索-123 quick searching
- java中常用注解
- AS汇编器源码剖析-第1章-Arm操作码
- 本地广播LocalBroadcastManager与Android.support.v4.jar导入
- ACM博弈论小结
- CodeForces 148D Bag of mice (经典概率dp)
- 对HTTP请求的Get和Post的一些理解
- python模块之mysql模块MySQLdb
- 决策树学习笔记
- WM_PAINT消息详解
- 三国吧兄弟 本机搭建 教程 一键端
- HDU5723(2016多校第一场)——Abandoned country(最小生成树+dfs)