2017-02-16 4 views
1

저는 Android 용 지오 펜스 앱을 개발 중입니다. Google에서 제공하는 example의 도움으로 IntentService에서 BroadcastReceiver으로 리팩토링하면 here으로 표시됩니다. 앱이 백그라운드에있는 경우 예상대로 작동하는 앱을 보유하게되었습니다. 내가 관리하지 못한 것은 내 앱을 업데이트 할 수있는 방법입니다. 앱이 죽으면 모델이 될까요? 내 GeofenceReceiver은 앱이 죽는 동안 트리거되거나 호출되지만 내 MainActivity에는 내 BroadcastReceiver 메시지가 수신되지 않습니다. 내 GeofenceReceiver에서IntentReceiver에서 닫힌/종료 된 앱을 업데이트하는 방법은 무엇입니까?

나는 지오 펜스 전이 얻는 경우에 나는 같은 것을 할 : 이미 방송이 수신되는 것을 특징으로

Intent broadcastIntent = new Intent(ACTION); 
     broadcastIntent.putExtra("resultCode", Activity.RESULT_OK); 
     broadcastIntent.putExtra(Constants.BUNDLE_KEY, bundle); 
     LocalBroadcastManager.getInstance(context).sendBroadcast(broadcastIntent); 

:

1 :

Intent notificationIntent = new Intent(context, MainActivity.class); 
    notificationIntent.putStringArrayListExtra(Constants.TRIGGERING_GEOFENCE_IDS_KEY, triggeringIDs); 

    TaskStackBuilder stackBuilder = TaskStackBuilder.create(context); 
    stackBuilder.addParentStack(MainActivity.class); 
    stackBuilder.addNextIntent(notificationIntent); 

    PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT); 

    NotificationCompat.Builder builder = new NotificationCompat.Builder(context); 
    builder.setSmallIcon(R.mipmap.ic_launcher) 
      .setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.mipmap.ic_launcher)) 
      .setColor(Color.RED) 
      .setContentTitle(notificationDetails) 
      .setContentText(context.getString(R.string.geofence_transition_notification_text)) 
      .setPriority(NotificationCompat.PRIORITY_HIGH) 
      .setContentIntent(resultPendingIntent); 
    builder.setAutoCancel(true); 

    NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
    mNotificationManager.notify(0, builder.build()); 

(2) 내 MainActivity에 앱이 백그라운드에있는 경우 앱을 죽이면 내 MainActivity에 방송이 수신되지 않습니다. 터미널과 logcat으로 확인했습니다.

아이디어가 있으십니까?

+0

그래서 당신은 당신이 당신의 브로드 캐스트 리시버에 방송을 받게되는 것을 의미하지만, 당신이 당신의 주요 활동 안에 그것을 얻을하지 않습니다 무엇? – cafebabe1991

+0

@ cafebabe1991 기본적으로 그렇습니다. 내 GeofenceReceiver 여전히 응용 프로그램이 사망하더라도 지오 펜스 전환을 요구하고 있지만 그때 내 MainActivity에 뭔가를 방송 할 수 없습니다. – wman

답변

0

앱이 종료 되었기 때문에 앱을 다시 시작해야합니다. 앱은 BroadcastReceiver 클래스에서 전달 된 컨텍스트를 사용하여 시작할 수 있습니다. 지오 펜스 데이터 활동을 보내려면 아래 스 니펫을 참조하십시오.

@Override 
public void onReceive(Context context, Intent intent) { 
    Intent i = new Intent(); 
    i.setClassName("com.test", "com.test.MainActivity"); 
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    i.putExtra("data", geoData); 
    context.startActivity(i) 
} 
+0

Intent와 함께 시도했습니다. broadcastIntent = new Intent (context, MainActivity.class); broadcastIntent.setFlags (Intent.FLAG_ACTIVITY_NEW_TASK); broadcastIntent.putExtra ("resultCode", Activity.RESULT_OK); broadcastIntent.putExtra (Constants.BUNDLE_KEY, bundle); context.startActivity (broadcastIntent); 그러나 이것은 내 앱이 포어 그라운드로 이동한다는 것을 의미합니다. 나는 그것을 원하지 않는다. 그냥 lastPosition Geofence를 새로 고치기 위해 모델을 업데이트하려고합니다. – wman

+0

그러면 서비스를 시작해야하며 서비스가 데이터를 업데이트해야합니다. – cafebabe1991