簡體   English   中英

廣播接收器中的lockNow()

[英]lockNow() in broadcast receiver

當我嘗試在廣播接收器中使用LockNow()時,似乎出現錯誤。 誰能幫我。

public class Onlockreceive extends BroadcastReceiver {

LockSettings lockactivity;

@Override
public void onReceive(Context context, Intent intent) {
    // TODO Auto-generated method stub
lockactivity.mdevicepolicymanager.lockNow();    

} 
}

錯誤消息:

12-31 03:14:16.322:D / AndroidRuntime(27478):關閉VM 12-31 03:14:16.322:W / dalvikvm(27478):threadid = 1:線程退出且未捕獲異常(group = 0x41b0d378)12 -31 03:14:16.332:E / AndroidRuntime(27478):致命異常:主12-31 03:14:16.332:E / AndroidRuntime(27478):java.lang.RuntimeException:無法啟動接收器com.example.settings2 .onlockreceive:java.lang.NullPointerException 12-31 03:14:16.332:E / AndroidRuntime(27478):at android.app.ActivityThread.handleReceiver(ActivityThread.java:2257)12-31 03:14:16.332:E / AndroidRuntime(27478):位於android.app.ActivityThread.access $ 1500(ActivityThread.java:138)12-31 03:14:16.332:E / AndroidRuntime(27478):位於android.app.ActivityThread $ H.handleMessage(ActivityThread。 java:1283)12-31 03:14:16.332:E / AndroidRuntime(27478):at android.os.Handler.dispatchMessage(Handler.java:99)12-31 03:14:16.332:E / AndroidRuntime(27478) :位於android.os.Looper.loop(Looper.java:213)12-31 03:14:16.332:E / AndroidRuntime(27478):位於android.app.Act ivityThread.main(ActivityThread.java:4787)12-31 03:14:16.332:E / AndroidRuntime(27478):at java.lang.reflect.Method.invokeNative(Native Method)12-31 03:14:16.332:E / AndroidRuntime(27478):at java.lang.reflect.Method.invoke(Method.java:511)12-31 03:14:16.332:E / AndroidRuntime(27478):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:789)12-31 03:14:16.332:E / AndroidRuntime(27478):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)12-31 03: 14:16.332:E / AndroidRuntime(27478):在dalvik.system.NativeStart.main(本機方法)12-31 03:14:16.332:E / AndroidRuntime(27478):原因:java.lang.NullPointerException 12-31 03:14:16.332:E / AndroidRuntime(27478):在com.example.settings2.Onlockreceive.onReceive(Onlockreceive.java:15)12-31 03:14:16.332:E / AndroidRuntime(27478):在android.app .ActivityThread.handleReceiver(ActivityThread.java:2250)12-31 03:14:16.332:E / AndroidRuntime(27478):...還有10個


我的問題類似於這一個相同的問題 ..但我不知道如何解決它

這是我用來呼叫廣播接收器的代碼

private void setupAlarm(int seconds,boolean s) {



// Finish the currently running activity
   // MainActivity.this.finish();

  AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
  Intent intent = new Intent(getBaseContext(), Onlockreceive.class);

  PendingIntent pendingIntent = PendingIntent.getBroadcast(
     LockSettings.this, 0, intent,
     PendingIntent.FLAG_UPDATE_CURRENT);


  Log.d(TAG, "Setup the alarm");

  // Getting current time and add the seconds in it
  Calendar cal = Calendar.getInstance();
  cal.add(Calendar.SECOND, seconds);

if (s == true){
  //alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent);
  //alarmManager.setInexactRepeating(type, triggerAtMillis, intervalMillis, operation)
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 5000, pendingIntent   );
}else if (s == false)
{
    alarmManager.cancel(pendingIntent);
}

}

lockactivitymdevicepolicymanagernull 這不足為奇,因為您的過程很可能在BroadcastReceiver得到控制之前已經終止。

靜態數據成員只是一個緩存 不要依靠他們。 而且最肯定的是不要將Activity放在靜態數據成員中 ,因為這樣做會浪費大量內存。

您可以使用傳遞給onReceive()Context來檢索DevicePolicyManager並調用lockNow()

更新

這是經過修訂的類,具有更好的格式和大小寫:

public class OnLockReceive extends BroadcastReceiver {  
  @Override
  public void onReceive(Context context, Intent intent) {
    ((DevicePolicyManager)context.getSystemService(Context.DEVICE_POLICY_SERVICE)).lockNow();
  } 
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM