2015-03-25 107 views
0

为什么我的广播接收器只发送和创建通知?我试图让它自动打开设备,但由于某种原因,设备状态不会改变。广播接收器不触发

它适用于在其他类中触发但不在广播中。

请帮我找到解决办法:)

public class ProximityIntentReceiver extends BroadcastReceiver { 

    public boolean isFirstRun = false; //Set this to true when user initially saves location 
    private static final int NOTIFICATION_ID = 1000; 
    WemoActivity wemo = new WemoActivity(); 
    private WeMoSDKContext mWeMoSDKContext = null; 
    private String DeviceName = "uuid:Socket-1_0-221412K1100F3A"; 

    @Override 
    public void onReceive(Context context, Intent intent) { 

     String key = LocationManager.KEY_PROXIMITY_ENTERING; 
     Boolean entering = intent.getBooleanExtra(key, false); 
     SharedPreferences mprefs = context.getSharedPreferences("First time", Context.MODE_PRIVATE); 
     boolean isFirstRun = mprefs.getBoolean("First time", false); 

     if (entering) { 
      Toast.makeText(context,"in the region" ,Toast.LENGTH_LONG).show(); 
      Log.d(getClass().getSimpleName(), "Entering"); 
     } else { 
      Log.d(getClass().getSimpleName(), "Exiting"); 
      Toast.makeText(context,"out of the region" ,Toast.LENGTH_LONG).show(); 
     } 
     sendNotification(context); 
     // automatically switch device state when enter/leave region 
     DeviceState(context.getApplicationContext(), entering); 

    } 

    public void sendNotification(Context context) { 
     // String extra=arg1.getExtras().getString("alert").toString(); 
     long when = System.currentTimeMillis(); 
     String message = "You are near your office/home."; 

     NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
     Notification notification = new Notification(R.drawable.ic_launcher,message, when); 
     String title = "Proximity Alert!"; 
     Intent notificationIntent = new Intent(); 
     // set intent so it does not start a new activity 
     notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
     PendingIntent intent = PendingIntent.getActivity(context, 0,notificationIntent, 0); 
     notification.setLatestEventInfo(context, title, message, intent); 
     notification.flags |= Notification.FLAG_AUTO_CANCEL; 
     notification.flags |= Notification.FLAG_SHOW_LIGHTS; 
     notification.ledARGB = Color.WHITE; 
     notification.ledOnMS = 1500; 
     notification.ledOffMS = 1500; 
     notification.defaults = Notification.DEFAULT_ALL; 
     notificationManager.notify(NOTIFICATION_ID, notification); 
     return; 
    } 

    private void DeviceState(Context context, boolean ON) { 
     mWeMoSDKContext = new WeMoSDKContext(context); 
     mWeMoSDKContext.addNotificationListener(null); 
     if(ON) { 
      mWeMoSDKContext.setDeviceState(WeMoDevice.WEMO_DEVICE_ON, DeviceName); 
     } else { 
      mWeMoSDKContext.setDeviceState(WeMoDevice.WEMO_DEVICE_OFF, DeviceName); 
     } 
    } 
} 
+0

你好u能请张贴的舱单申报播出? – user1140237 2015-03-25 05:10:42

+0

使用上下文而不是context.getApplicationContext()。并尝试在DeviceState()中打印某些内容。 – Harry 2015-03-25 07:02:09

+0

我试过使用上下文,但没有任何更改。打印什么? – Abby 2015-03-25 13:48:43

回答

0

假如你在manifest文件这样提到你的接收器:

<receiver 
      android:name="receiver_name" 
      android:enabled="true" > 
+0

是的,我做到了。 (未启用= true)。我用过滤器,所以它不需要在清单我承担...通知创建,但设备状态不会触发 – Abby 2015-03-25 04:45:13

+0

使它也启用清单,并尝试 – 2015-03-25 04:48:47

+0

我试过了,但没有改变 – Abby 2015-03-25 13:47:39