【问题标题】:lockNow() in broadcast receiver广播接收器中的luckNow()
【发布时间】:2014-12-30 19:19:53
【问题描述】:

当我尝试在广播接收器中使用 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): 致命异常: main 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): 在 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): 在 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.ActivityThread.main(ActivityThread.java:4787) 12-31 03:14:16.332: E/AndroidRuntime(27478): 在 java.lang.reflect.Method.invokeNative (本机方法)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): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789) 12-31 03:14:16.332: E/AndroidRuntime(27478): 在 com.android.internal.os.ZygoteInit .main(ZygoteInit.java:556) 12-31 03:14:16.332: E/AndroidRuntime(27478): at dalvik.system.NativeStart.main(Native Method) 12-31 03:14:16.332: E/AndroidRuntime( 27478): 引起: java.lang.NullPointerException 12-31 03:14:16.332: E/AndroidRuntime(27478): at 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 更多


我的问题类似于same problem.. 但我不明白如何解决它

这是我用来调用广播接收器的代码

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

}

【问题讨论】:

    标签: java android locking broadcastreceiver lockscreen


    【解决方案1】:

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

    【讨论】:

    • 你能解释一下我如何使用上下文来检索 DevicePolicyManager
    • @Azharan:假设mdevicepolicymanager 应该是DevicePolicyManager,您将按照您在活动中获得DevicePolicyManager 的方式执行此操作。您可以在传递给onReceive()Context 上调用(DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE)
    • 抱歉再次询问..我发布了我用来调用广播接收器的代码..你的意思是我需要修改这部分'PendingIntent pendingIntent = PendingIntent.getBroadcast( LockSettings.this, 0 , 意图, PendingIntent.FLAG_UPDATE_CURRENT); '
    • @Azharan:不。那不是你崩溃的地方。您在 Onlockreceive BroadcastReceiveronReceive() 方法中崩溃了。在OnlockreceiveBroadcastReceiveronReceive() 方法中,使用getSystemService() 获得DevicePolicyManager,然后在DevicePolicyManager 上调用lockNow()。您可以在 Context 上调用 getSystemService(),该 onReceive() 方法将传递给您的 Onlockreceive BroadcastReceiver
    • public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub dpm = (DevicePolicyManager) getSystemService (Context.DEVICE_POLICY_SERVICE); dpm.lockNow(); } private DevicePolicyManager getSystemService(String devicePolicyService) { // TODO Auto-generated method stub return dpm; } 我将 dpm 初始化为 DevicePolicyManager.. 你能看到这个有什么问题吗,因为我仍然有错误
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多