应用程序会在一秒钟后自动重启

时间:2015-04-12 18:43:11

标签: android

我想把BoradcastReceiverListerner - 以前嵌套在MainActivity并在那里工作得很好 - 在一个单独的课程中,因为我的MainActivity已经非常大了。在onReceive()中我需要调用方法deliverBestAccessPoint()textWifi()所以我决定使用Parcelable接口来执行此操作,因为传递的数据是ScanResult但是我我遇到的问题是,应用程序会在一秒钟后自动重启并且会自动定期播放wifi scanResult吗?

BroadcastReceiverListener类:

public class BroadcastReceiverListener extends BroadcastReceiver implements Parcelable  {

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(
                android.net.wifi.WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)) {

            WifiManager wifiManager = (WifiManager) context
                    .getSystemService(Context.WIFI_SERVICE);
            final List<ScanResult> results = wifiManager.getScanResults();
            if (results != null) {
                ArrayList<ScanResult> updatedResults = new ArrayList<ScanResult>();
                for (int i = 0; i < results.size(); i++) {
                    String ssid = results.get(i).SSID;
                    if (ssid.startsWith("KD")) {
                        updatedResults.add(results.get(i));
                    }
                }

                Intent updateIntenet = new Intent(context, MainActivity.class);
                updateIntenet.putParcelableArrayListExtra("broadcast_event",
                         updatedResults);
                context.startActivity(updateIntenet);

            }
        }

        else if (intent.getAction().equals(
                android.net.ConnectivityManager.CONNECTIVITY_ACTION)) {

                 }
        }
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {

    }
}

MainActivity中的onNewIntent方法:

        @Override
        protected void onNewIntent(Intent intent) {
            String intentResult = intent.getStringExtra("broadcast_event");
            if (intentResult != null) {
                List<ScanResult> results = intent.getParcelableArrayListExtra("broadcast_event");
                String a = deliverBestAccessPoint(results);
                textWifi.setText(a.toString());
            } else {
                textWifi.setText("No route is available.");
            }
        }

清单:

  <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    <!--    <receiver android:name=".BroadcastReceiverListener" >
            <intent-filter>
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
                <action android:name="android.net.wifi.SCAN_RESULTS" />
            </intent-filter>
        </receiver> -->
    </application>

1 个答案:

答案 0 :(得分:1)

很难说为什么您的应用会重新启动,但我可以看到一个阻止textWifi填充的问题。

当您实际上是intent.getStringExtra("broadcast_event")时,您正在呼叫ParcelableArrayListExtra

一个简单的解决方法是只检查getExtras()的返回值:

//String intentResult = intent.getStringExtra("broadcast_event");
            if (intent.getExtras() != null) {
                List<ScanResult> results = intent.getParcelableArrayListExtra("broadcast_event");

作为旁注,我认为BroadcastReceiver实施Parcelable是必要的。 这里唯一需要实现Parcelable的是ScanResultwhich it does