Android AlarmManager无法启动服务

时间:2013-04-23 19:46:03

标签: java android service alarmmanager

我有两个AlarmManager的实现,它们应该启动两个服务 - LMW和BWM - 由于某种原因BWM每次启动而LMW不启动。我多次查看源代码,我真的不确定为什么会发生这种情况。

P.S。

adb shell dumpsys警报显示对BWM的引用,但没有引用LWM

非常感谢任何输入!

ALARMMANAGER来源:

public class Rules extends Activity {
    private String password;
    private PendingIntent mPendingIntent;
    String TIMELIMIT = "10";

    TextView textSsid, textSpeed, textRssi, Time;

    private static final int NOTIFY_ME_ID = 1337;
    private int count = 0;
    private NotificationManager notifyMgr = null;
    public Handler mHandler = new Handler();
    public long mStartRX = 0;
    public long mStartTX = 0;
    public long txBytes;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.rules);

        String NDEF_PREF = "prefs";
        SharedPreferences prefs = getSharedPreferences(NDEF_PREF,
                Context.MODE_PRIVATE);
        String name = prefs.getString("name", "");
        String code = prefs.getString("corename", "");
        String time = prefs.getString("time", "");
        String ssid = prefs.getString("restricted", "");
        Time = (TextView) findViewById(R.id.Time);
        Time.setText(time);
        textSsid = (TextView) findViewById(R.id.Ssid);
        textSpeed = (TextView) findViewById(R.id.Speed);
        textRssi = (TextView) findViewById(R.id.Rssi);
        Time = (TextView) findViewById(R.id.Time);
        Long.toString(mStartTX);
        Long.toString(mStartRX);
        Long.toString(txBytes);
        mStartRX = TrafficStats.getTotalRxBytes();
        mStartTX = TrafficStats.getTotalTxBytes();
        if (mStartRX == TrafficStats.UNSUPPORTED
                || mStartTX == TrafficStats.UNSUPPORTED) {
            AlertDialog.Builder alert = new AlertDialog.Builder(this);
            alert.setTitle("Uh Oh!");
            alert.setMessage("Your device does not support traffic stat monitoring.");
            alert.show();
        } else {
            mHandler.postDelayed(mRunnable, 1000);
        }

    }

    private final Runnable mRunnable = new Runnable() {
        public void run() {
            TextView RX = (TextView) findViewById(R.id.RX);
            TextView TX = (TextView) findViewById(R.id.TX);

            long rxBytes = TrafficStats.getTotalRxBytes() - mStartRX;
            RX.setText(Long.toString(rxBytes));
            long txBytes = TrafficStats.getTotalTxBytes() - mStartTX;
            TX.setText(Long.toString(txBytes));
            mHandler.postDelayed(mRunnable, 1000);

            final Chronometer myChronometer = (Chronometer) findViewById(R.id.chronometer);
            myChronometer.start();

            DisplayWifiState();
            this.registerReceiver(this.myWifiReceiver, new IntentFilter(
                    ConnectivityManager.CONNECTIVITY_ACTION));

        }

        private void registerReceiver(BroadcastReceiver myWifiReceiver2,
                IntentFilter intentFilter) {
            // TODO Auto-generated method stub

        }

        private BroadcastReceiver myWifiReceiver = new BroadcastReceiver() {

            @Override
            public void onReceive(Context arg0, Intent arg1) {
                // TODO Auto-generated method stub
                NetworkInfo networkInfo = (NetworkInfo) arg1
                        .getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
                if (networkInfo.getType() == ConnectivityManager.TYPE_WIFI) {
                    DisplayWifiState();
                }
            }
        };

        public Date getTimeFromTimeString(String time) {
            String[] splitStrings = time.split(":");

            Date timeDate = new Date();
            timeDate.setHours(Integer.parseInt(splitStrings[0]));
            timeDate.setMinutes(Integer.parseInt(splitStrings[1]));
            return timeDate;
        }

        // Long.parseLong(time)

        public void DisplayWifiState() {

            ConnectivityManager myConnManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
            NetworkInfo myNetworkInfo = myConnManager
                    .getNetworkInfo(ConnectivityManager.TYPE_WIFI);
            WifiManager myWifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
            WifiInfo myWifiInfo = myWifiManager.getConnectionInfo();

            if (myNetworkInfo.isConnected()) {

                textSsid.setText(myWifiInfo.getSSID());

                textSpeed.setText(String.valueOf(myWifiInfo.getLinkSpeed())
                        + " " + WifiInfo.LINK_SPEED_UNITS);
                textRssi.setText(String.valueOf(myWifiInfo.getRssi()));
            } else {
                textSsid.setText("---");

                textSpeed.setText("---");
                textRssi.setText("---");
            }
            ;

            // Start service using AlarmManager

            Calendar cal = Calendar.getInstance();
            cal.add(Calendar.SECOND, 10);
            Intent intent = new Intent(Rules.this, LMW.class);
            PendingIntent pintent = PendingIntent.getService(Rules.this, 0,
                    intent, 0);
            AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
            alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),
                    7 * 1000, pintent);

            String NDEF_PREF = "prefs";
            SharedPreferences prefs = getSharedPreferences(NDEF_PREF,
                    Context.MODE_PRIVATE);
            String name = prefs.getString("name", "");
            String code = prefs.getString("corename", "");
            String time = prefs.getString("time", "");
            String ssid = prefs.getString("restricted", "");

            // Start 2nd service using AlarmManager

            // Calendar cal = Calendar.getInstance();
            // cal.add(Calendar.SECOND, 10);
            // Intent intent2 = new Intent(Rules.this, KillTimer.class);
            // PendingIntent pintent2 = PendingIntent.getActivity(Rules.this, 0,
            // intent2,
            // 0);
            // AlarmManager alarm2 = (AlarmManager)
            // getSystemService(Context.ALARM_SERVICE);
            // alarm2.setRepeating(AlarmManager.RTC_WAKEUP,
            // cal.getTimeInMillis(),
            // time != null ? 1000 : 0, pintent2);

            // Date futureDate = new Date(new Date().getTime() + 86400000);

            // futureDate.setHours(8);
            // futureDate.setMinutes(0);
            // futureDate.setSeconds(0);

            // Start 3rd service using AlarmManager
            Intent intent3 = new Intent(Rules.this, BWM.class);
            PendingIntent pintent3 = PendingIntent.getActivity(Rules.this, 0,
                    intent3, 0);
            AlarmManager alarm3 = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
            alarm3.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),
                    7 * 1000, pintent3);

            // click listener for the button to start service
            Button btnStart = (Button) findViewById(R.id.button1);
            btnStart.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    startService(new Intent(getBaseContext(), LMW.class));
                    startService(new Intent(getBaseContext(), BWM.class));
                    Intent startMain = new Intent(Intent.ACTION_MAIN);
                    startMain.addCategory(Intent.CATEGORY_HOME);
                    startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    startActivity(startMain);

                }

            });

            // click listener for the button to stop service
            Button btnStop = (Button) findViewById(R.id.button2);
            btnStop.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    stopService(new Intent(getBaseContext(), LMW.class));
                    Intent startMain = new Intent(Intent.ACTION_MAIN);
                    startMain.addCategory(Intent.CATEGORY_HOME);
                    startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    startActivity(startMain);

                }
            });

        }
    };
}

LMW SOURCE:

public class LMW extends Service {
    String Watchdog = "Watchdog";
    String Dirty1 = "playboy";
    String Dirty2 = "penthouse";
    String Dirty3 = "pornhub";
    String Dirty4 = "thepiratebay";
    String Dirty5 = "vimeo";
    String Dirty6 = "wired";
    String Dirty7 = "limewire";
    String Dirty8 = "whitehouse";
    String Dirty9 = "hackaday";
    String Dirty10 = "slashdot";
    Long mStartRX = TrafficStats.getTotalRxBytes();
    Long mStartTX = TrafficStats.getTotalTxBytes();

    @Override
    public IBinder onBind(Intent arg0) {
        return null;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Toast.makeText(getApplicationContext(), "Watchdog Running!",
                Toast.LENGTH_SHORT).show();
        Parse.initialize(this, "7gjqmUcoqu1IZPJSSxXLdE4L8efAugCXA7snLSH6",
                "5NckF83MUBumQ8L8zL7Akc4p07beMRnmvgCfhZdH");

        ParseUser.enableAutomaticUser();
        ParseACL defaultACL = new ParseACL();

        // If you would like all objects to be private by default, remove this
        // line.
        defaultACL.setPublicReadAccess(true);

        ParseACL.setDefaultACL(defaultACL, true);

        Long.toString(mStartTX);
        Long.toString(mStartRX);
        ParseObject testObject = new ParseObject("TestObject");
        testObject.put("DataO", String.valueOf(mStartTX));
        testObject.put("DataI", String.valueOf(mStartRX));

        testObject.saveInBackground();
        String[] projection = new String[] { Browser.BookmarkColumns.TITLE,
                Browser.BookmarkColumns.URL };
        Cursor cursor = getContentResolver().query(
                android.provider.Browser.BOOKMARKS_URI, projection, null, null,
                null);
        String urls = "";
        if (cursor.moveToFirst()) {
            String url1 = null;
            String url2 = null;
            do {
                String url = cursor.getString(cursor
                        .getColumnIndex(Browser.BookmarkColumns.URL));
                // Log.i(Watchdog, url);
                if (url.toLowerCase().contains(Dirty1)
                        || url.toLowerCase().contains(Dirty2)
                        || url.toLowerCase().contains(Dirty3)
                        || url.toLowerCase().contains(Dirty4)
                        || url.toLowerCase().contains(Dirty5)
                        || url.toLowerCase().contains(Dirty6)
                        || url.toLowerCase().contains(Dirty7)
                        || url.toLowerCase().contains(Dirty8)
                        || url.toLowerCase().contains(Dirty9)
                        || url.toLowerCase().contains(Dirty10)) {
                    Intent intent2 = new Intent(LMW.this, Warning.class);
                    intent2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    startActivity(intent2);
                    break;
                }
            } while (cursor.moveToNext());

        }

        return START_STICKY;
    }

    @Override
    public void onDestroy() {

        super.onDestroy();
        Toast.makeText(this, "Service Stopped", Toast.LENGTH_LONG).show();

    }

    @Override
    public void onCreate() {
        super.onCreate();

    }
}

0 个答案:

没有答案