1

Android에서 성공하지 못한 것처럼 보이는 간단한 작업을 수행하는 데 몇 시간 동안 노력했습니다. 사용자가 업적을 얻을 수있는 앱이 있습니다. 계산 된 서버 측이 있고 내 Android 앱에 푸시를 통해 전송됩니다. 푸시 알림을 받으면 다음 두 가지 중 하나를하고 싶습니다. (1) 내 앱이 실행 중이면 업적 정보가 표시된 팝업을 표시하고 싶습니다.이 레이아웃은 xml에 있습니다.). (2) 내 앱이 실행되고 있지 않으면 알림 표시 줄에 알림을 게시하십시오.앱이 실행 중일 때 푸시 알림 팝업 표시

첫 번째 질문 : 아무리 노력해도 (1) ​​할 수 없습니다. GCM IntentService OnHandleIntent에서 다음과 같이 새로운 활동을 시작하려고했습니다.

int achID = jo.getInt("AchievementID"); 
Intent newAchievementIntent = new Intent(getBaseContext(), NewAchievementActivity.class); 
newAchievementIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
newAchievementIntent.putExtra("AchievementID", achID); 
getApplication().startActivity(newAchievementIntent); 

이 작업은 아무 것도 수행하지 않습니다. 나는 다음과 같은 내 모든 활동이 후 새로운 활동을 시작하는 방송 수신기를 가지고 특별한 IsRunningActivity, 상속 만드는 시도 :

public class IsRunningBaseActivity extends Activity 
{ 
    public static boolean isRunning = false; 
    public static IsRunningBaseActivity currentActivity = null; 

    @Override 
    protected void onResume() 
    { 
     // TODO Auto-generated method stub 
     super.onResume(); 

     currentActivity = this; 

     isRunning = true; 

     LocalBroadcastManager.getInstance(this).registerReceiver(new BroadcastReceiver() 
     { 

      @Override 
      public void onReceive(Context context, Intent intent) 
      { 
       int achId = intent.getExtras().getInt("AchievementID"); 
       Intent newAchievementIntent = new Intent(IsRunningBaseActivity.this, NewAchievementActivity.class); 
       newAchievementIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
       newAchievementIntent.putExtra("AchievementID", achId); 
       IsRunningBaseActivity.this.startActivity(newAchievementIntent); 
      } 
     }, new IntentFilter(CLServices.NOTIFICATION_NEW_ACHIEVEMENT)); 
    } 

    @Override 
    protected void onPause() 
    { 
     super.onPause(); 

     isRunning = false; 
    }; 
} 

그래서 지금 IntentService는 다음에 의해 포착 된 의도를 방송 활동을 시작한 다음 NewAchievementActivity를 시작하려고했습니다. 아직도 운이 없다. 활동이 시작되지 않습니다.

내가 뭘 잘못하고 있니? 내가 원하는 것을 성취하는 가장 좋은 방법은 무엇입니까?

두 번째 질문 : 앱이 실행 중이 아니기 때문에 푸시 알림을 표시하면 사용자가 내 앱을 열고 동일한 NewAchievementActivity를 표시하는 알림을 탭 할 수 있기를 바랍니다. 문제는 그 액티비티가 애플리케이션 컨텍스트에 의존한다는 것입니다 (사용자가 로그인하여 표시 할 업적 데이터를 검색 할 수 있도록 LoginToken이 있어야합니다). 그렇다면 앱의 정상적인 흐름을 계속 진행하면서 어떻게 그 활동을 열 수 있습니까? (LoginActivity, HomeActivity, NewAchievementActivity)? 이것은 가능한가?

도움 주셔서 대단히 감사합니다.

+1

시도해보십시오. http://commonsware.com/blog/2010/08/11/activity-notification-ordered-broadcast.html –

답변

0

문제점이 무엇인지 알아 냈습니다. 나는 열려고하는 활동에서 "setContentView"를 호출하지 않았습니다. 나는 그것이 어리석은 실수가되어야한다는 것을 알았다.

0

다음 코드는 첫 번째 질문에 대한 대답입니다. GCM을 사용하여 내 listview를 업데이트 할 때 작동했습니다. 질문은 찾을 수 있습니다. Refreshing activity on receiving gcm push notification 링크가 더 자세히 설명됩니다. 희망이 도움이됩니다.

@Override 
public void onResume() { 
super.onResume(); 
context .registerReceiver(mMessageReceiver, new IntentFilter("unique_name")); 
} 

//Must unregister onPause() 


@Override 

protected void onPause() { 

super.onPause(); 

context.unregisterReceiver(mMessageReceiver); 
} 


//This is the handler that will manager to process the broadcast intent 
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() { 
@Override 

public void onReceive(Context context, Intent intent) { 

    // Extract data included in the Intent 
    String message = intent.getStringExtra("message"); 

    //do other stuff here 
} 

}; 

정확하게 이해한다면 두 번째 질문입니다. 알림 클릭시 수행 할 작업을 지정할 수 있습니다. 따라서 사용자가 원하는 곳에 보낼 수 있습니다.

Intent intent= new Intent(context, MainActivity.class); 
PendingIntent contentIntent = PendingIntent.getActivity(context, 0,intent, 0); 
+0

첫 번째 질문은 그것이 내가 요구 한 것이 아닙니다. 알림 수신시 새로운 활동을 시작하거나 팝업을 표시하려고합니다. 알림이 올 때 이미 목록 뷰를 새로 고칠 수 있지만 "startActivity"는 작동하지 않습니다. 초 알림은 알림에서 활동을 시작하는 방법을 알고 있지만 내 문제는 다음과 같습니다. – user2527666

+0

NewAchievementNotification을 시작하고 싶습니다.하지만 작동하려면 먼저 다른 활동에있는 코드를 실행해야합니다! – user2527666

관련 문제