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)? 이것은 가능한가?
도움 주셔서 대단히 감사합니다.
시도해보십시오. http://commonsware.com/blog/2010/08/11/activity-notification-ordered-broadcast.html –