【问题标题】:how to handle Broadcast created inside Activity ?如何处理在 Activity 中创建的广播?
【发布时间】:2014-09-11 12:20:39
【问题描述】:

我在 Activity (ActionBarActivity) 中创建了一个 BroadcastReceiver

喜欢这个


public class MyTabListner extends ActionBarActivity {
.
.
.

    public class AppManagerBroadcast extends BroadcastReceiver {

                @Override
                public void onReceive(Context context, Intent intent) {
                    boolean applicationStatus = intent.getBooleanExtra(Intent.EXTRA_REPLACING, false);
                    String toastMessage = null;
                    if(intent.getAction().equals("android.intent.action.PACKAGE_INSTALL")){
                        toastMessage = "PACKAGE_INSTALL: "+  intent.getData().toString();


                    }else
                    if(intent.getAction().equals("android.intent.action.PACKAGE_REPLACED")){
                        toastMessage = "PACKAGE_REPLACED: "+  intent.getData().toString() ;

                    }else
                    if(intent.getAction().equals("android.intent.action.PACKAGE_REMOVED")){
                        toastMessage = "PACKAGE_REMOVED: "+  intent.getData().toString();

                    }
                    //Display Toast Message
                    if(toastMessage != null){
                        Toast.makeText(context, toastMessage, Toast.LENGTH_LONG).show();
                    }
                }



            }
.
.
.
}

我在 manifest.xml 中注册 像这样

 <receiver
            android:name="com.example.activity.MyTabListner$AppManagerBroadcast"
            android:enabled="true" >
            <intent-filter android:priority="1" >
                <action android:name="android.intent.action.PACKAGE_INSTALL" />
                <action android:name="android.intent.action.PACKAGE_REPLACED" />
                <action android:name="android.intent.action.PACKAGE_REMOVED" />
                <data android:scheme="package" />
            </intent-filter>
        </receiver>

但我以这种方式遇到了异常。 例外是。

09-11 17:45:46.434: E/AndroidRuntime(23502): FATAL EXCEPTION: main
09-11 17:45:46.434: E/AndroidRuntime(23502): java.lang.RuntimeException: Unable to instantiate receiver com.example.activity.MyTabListner$AppManagerBroadcast: java.lang.InstantiationException: can't instantiate class com.example.activity.MyTabListner$AppManagerBroadcast; no empty constructor

09-11 17:45:46.434: E/AndroidRuntime(23502): Caused by: java.lang.InstantiationException: can't instantiate class com.example.activity.MyTabListner$AppManagerBroadcast; no empty constructor

当我创建外部活动时,我成功地完全运行了我的应用程序,但是 我想在我的活动 不是外部活动中使用这个broadcastreceiver。 如何避免这个异常

【问题讨论】:

    标签: android android-activity broadcastreceiver


    【解决方案1】:

    内部类必须是静态类。

    改变

    public class AppManagerBroadcast extends BroadcastReceiver
    

    public static class AppManagerBroadcast extends BroadcastReceiver
    

    【讨论】:

      【解决方案2】:

      在我看来,您必须将内部类声明为静态。目前内部类必须与外部类的实例一起使用,这可能不是您想要的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-02
        • 2021-08-11
        • 1970-01-01
        • 2016-10-06
        • 2019-11-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多