2013-04-22 81 views
0

我的源代碼中內置了2個AlarmManager實例 - 第2個實例應該在由string:time指定的時間啓動一個Activity。 textview顯示字符串的正確時間:但是它從來沒有出現啓動第二個AlarmManager的活動(KillTimer.java),我不知道爲什麼。我確定我忽略了一些簡單的東西,但我不確定它會是什麼。Android AlarmManager不會啓動活動

P.S.

我認爲這可能與我已經實現時間字符串的方式有關 - 但我真的不確定。

的時間字符串應該表示可以通過1000以下行相乘:

時間=空? 1000:0,pintent2);

但是,源代碼永遠不會識別它,並且Alarm從不會像在爲時間添加字符串之前那樣喚醒活動。

代碼段:(報警,不會開始使用字符串的值:時間)

// Start 2nd service using AlarmManager 


    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); 

完整源:

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


TextView textSsid, textSpeed, textRssi, Time; 
//Notification message ID 
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); 


    Parse.initialize(this, "7gjqmUcoqu1IZPJSSxXLdE4L8efAugCXA7snLSH6", "5NckF83MUBumQ8L8zL7Akc4p07beMRnmvgCfhZdH"); 

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


    defaultACL.setPublicReadAccess(true); 

    ParseACL.setDefaultACL(defaultACL, true); 

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);  
ParseAnalytics.trackAppOpened(getIntent()); 



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 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", ""); 

     //String time = String.valueOf(time); 




     // Start 2nd service using AlarmManager 


     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); 




    // 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));    
      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); 

     } 
    }); 





}};} 

KILLTIMER.JAVA

public class KillTimer extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.killtimer); 
     Toast.makeText(getApplicationContext(), "KillWifi Running!", Toast.LENGTH_SHORT).show(); 
     WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE); 
     int networkId = wifiManager.getConnectionInfo().getNetworkId(); 
     wifiManager.removeNetwork(networkId); 
     wifiManager.saveConfiguration(); 

    }} 

廣播接收方來源:

import java.util.List; 

import android.app.Activity; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.content.IntentFilter; 
import android.net.wifi.ScanResult; 
import android.net.wifi.WifiConfiguration; 
import android.net.wifi.WifiManager; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 
import android.widget.Toast; 


public class StartKillTimerReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     startActivity(context, KillTimer.class); 
    } 
} 

回答

0
PendingIntent.getActivity 

應該

PendingIntent.getService 

不用解釋,我覺得你在這裏理解上的差異,它是一種直線前進!

編輯:

如果你想開始AlarmManagerActivity你應該創建一個BroadcastReceiver和使用方法PendingIntent.getBroadcast。然後在你的Receiver裏面,你應該打電話startActivity(context, KillTimer.class);

實施Receiver。你還需要將Receiver添加到您的Manifest,如:<receiver android:name=".StartKillTimerReceiver" />

public class StartKillTimerReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     context.startActivity(context, KillTimer.class); 
    } 
} 

記住這Receiver只有一個工作要做,那就是啓動KillTimer。現在,最好創建一個可以完成多項任務的Receiver。所以如果你想開始不同的活動或者其他任何活動,你還應該使用Intent發送數據。

+0

恐怕這是不正確的。我發佈了我的KillTimer.java的內容 - 如果您看到其他內容 - 請告訴我! – 2013-04-22 09:09:06

+0

那麼,你當然不應該使用getActivity,因爲你想啓動一個服務,所以getService是使用的方法,否則它不起作用。 – Carnal 2013-04-22 09:10:25

+0

我不想開始一項服務 - 我想開始一項活動 - KillTimer的來源是KillTimer延伸活動{不是KillTimer延伸服務{ 你確定我應該使用getService嗎? – 2013-04-22 09:12:43