2

トグルボタンがオンになっているときに、バッテリーが少なくなっているかどうかを確認してwifiを無効にするブロードキャストを開始するアプリケーションを作成しようとしています。代わりに、トグルがオフになると、別のブロードキャストが開始され、wifi が開始されます。問題は、ボタンを押すとアプリケーションがクラッシュすることです。これは、トグルと wifi のコードです。

   public void getToggle(View view) { 
    // Is the toggle on?
   boolean on = ((ToggleButton) view).isChecked(); 
    if (on) {
            PackageManager pm = getPackageManager();
    ComponentName compName = 
    new ComponentName(getApplicationContext(), 
        LowBatteryReceiver.class);
        pm.setComponentEnabledSetting(
        compName,
        PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 
        PackageManager.DONT_KILL_APP);
    } else {                
           PackageManager pm = getPackageManager();
           ComponentName compName = 
           new ComponentName(getApplicationContext(), 
           LowBatteryReceiver.class);
           pm.setComponentEnabledSetting(
           compName,
           PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 
           PackageManager.DONT_KILL_APP);           
      }
    }


//wifi enable/disable
   public class LowBatteryReceiver extends BroadcastReceiver {

    public void onReceive(Context context, Intent intent) {
        wifiManager = (WifiManager) MainActivity.this.getSystemService(Context.WIFI_SERVICE); 
                        wifiManager.setWifiEnabled(false);
    }
}


public class OkBatteryReceiver extends BroadcastReceiver {

    public void onReceive(Context context, Intent intent) {
        wifiManager = (WifiManager) MainActivity.this.getSystemService(Context.WIFI_SERVICE); 
                        wifiManager.setWifiEnabled(true);
    }
}

これがマニフェストです。レシーバーは内側に<application>あり、<activity>タグは次のとおりです。

    <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.mycompany.myapp"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="17" />
<uses-permission android:name="android.permission.UPDATE_DEVICE_STATS" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
  <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
  <uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_SUPERUSER" />

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

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <receiver
     android:name=".LowBatteryReceiver"
     android:enabled="false" >
          <intent-filter>
                <action android:name="android.intent.action.BATTERY_LOW" />
            </intent-filter>
    </receiver>

    <receiver
     android:name=".OkBatteryReceiver"
     android:enabled="false" >
          <intent-filter>
                <action android:name="android.intent.action.BATTERY_OKAY" />
            </intent-filter>
    </receiver>
        <activity
            android:label="@string/app_name"
            android:name=".about"
            android:theme="@android:style/Theme.Holo.Light">    
        </activity>
</application>

どうすれば解決できますか? エラーが見つかりません.logcatで編集します: ログキャット

4

1 に答える 1

2

マニフェストから Receiver クラスへの参照が正しくありません。今は、パッケージ内の通常のクラスのようにそれらを参照します。これらは内部クラスであるため、次のように参照する必要があります (android:name属性を参照)。

<receiver
    android:name=".MainActivity$OkBatteryReceiver"
    android:enabled="false" >

    <intent-filter>
        <action android:name="android.intent.action.BATTERY_OKAY" />
    </intent-filter>

</receiver>

内部クラスは によって参照されます$

于 2013-07-02T14:27:21.997 に答える