0

どんな助けでも大歓迎です。

マニフェストにブロードキャストレシーバーがあり、android:enabled="true" がブロードキャストを受信して​​サービスを開始します。android:enabled="false" の場合、ブロードキャストは受信されず、サービスは開始されません。

これは、PackageManger を使用するときに期待されることです。これを設定アクティビティで使用しようとすると、Android:enabled="true" または android:enabled="false" の場合、サービスが常に呼び出されます。サービスは取得されません。呼ばれた。どちらの場合も、チェックボックスがオンになっているかどうかは関係ありません。

私が試した真/偽のロジックが台無しになっているという点で、プリファレンスアクティビティの構築方法に問題があると思います.Javaの構築方法であると信じさせるエラーは発生していません。これを解決するための助けが本当に欲しいです。よろしくお願いいたします。

以下は設定 XML と設定 Java です。

<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android">
<CheckBoxPreference

android:key="CheckBox"

 android:id="@+id/CheckBox1" 
 android:title=" StartUp" 
 android:summary="Change The CheckBox Status here, it will be saved in 
 Preference" />
</PreferenceScreen>

そして、以下はJavaです

package com.collabera.labs.sai;

import java.util.Calendar;

import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.ComponentName;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
mport android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.preference.PreferenceManager;
import android.view.View;
import android.widget.CheckBox;

public class ShowPreferences extends PreferenceActivity implements     
 OnSharedPreferenceChangeListener{
boolean CheckBox;
CheckBox cb;
PreferenceManager pm;
SharedPreferences sp;
Editor editor;
private String CHECKBOX;


/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.bootpreference);

    cb = (CheckBox) findViewById(R.id.CheckBox1);

    loadPref();}



     private void loadPref() {
    // TODO Auto-generated method stub

    SharedPreferences sp =        
    PreferenceManager.getDefaultSharedPreferences(this);  
    sp.getBoolean("CHECKBOX", false);}



     private void savePrefs(String key, boolean value) {
        SharedPreferences sp = 
        PreferenceManager.getDefaultSharedPreferences(this); 
        Editor edit = sp.edit();
        edit.putBoolean(CHECKBOX, true);
        edit.commit();
     }


         public void onClick(View v) {
        // TODO Auto-generated method stub
        savePrefs("CHECKBOX", cb.isChecked());
        if (cb.isChecked());


       }


       public void pendingIntent()   {
      // TODO Auto-generated method stub

     }

     public void onSharedPreferenceChanged(SharedPreferences  
     sharedPreferences,
        String key, boolean cbValue) {
     // TODO Auto-generated method stub

     if(cbValue){
        cb.setChecked(true);

        Intent myIntent = new Intent(getBaseContext(), 
                BroadcastServiceReceiver.class);

         PendingIntent pendingIntent 
            = PendingIntent.getBroadcast(getBaseContext(), 
                    0, myIntent, 0);

         AlarmManager alarmManager 
                = (AlarmManager)getSystemService(ALARM_SERVICE);
         Calendar calendar = Calendar.getInstance();
         calendar.setTimeInMillis(System.currentTimeMillis());
         calendar.add(Calendar.SECOND, 10);
         long interval = 60 * 1000; //
         alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, 
                 calendar.getTimeInMillis(), interval, pendingIntent);

         PackageManager pm = getPackageManager();
         ComponentName compName = 
               new ComponentName(getApplicationContext(), 
                       BroadcastServiceReceiver.class);
         pm.setComponentEnabledSetting(
               compName,
               PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, 0);







         }else{
           cb.setChecked(false);

         Intent myIntent = new Intent(getBaseContext(), 
                 BroadcastServiceReceiver.class);

         PendingIntent pendingIntent 
            = PendingIntent.getBroadcast(getBaseContext(), 
                    0, myIntent, 0);

         AlarmManager alarmManager 
                = (AlarmManager)getSystemService(ALARM_SERVICE);
         Calendar calendar = Calendar.getInstance();
         calendar.setTimeInMillis(System.currentTimeMillis());

         alarmManager.cancel(pendingIntent);


         PackageManager pm = getPackageManager();
         ComponentName compName = 
               new ComponentName(getApplicationContext(), 
                       BroadcastServiceReceiver.class);
         pm.setComponentEnabledSetting(
               compName,
               PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 0);}


         }

         @Override
         public void onSharedPreferenceChanged(SharedPreferences 
         sharedPreferences,
         String key) {
         // TODO Auto-generated method stub
         savePrefs("CHECKBOX", cb.isChecked());
         if (cb.isChecked());


         }

         }
4

1 に答える 1

0

Package Manager は必要ないことがわかりました。放送受信機を適切に構築するために必要なだけです。

このリンクで見つかりました。

共有設定が boot_received ブロードキャスト レシーバー内でブール値を設定しない

少しでも興味を持ってくださった方、ありがとうございます。

マイク

于 2015-04-27T16:14:39.930 に答える