2016-09-22 33 views
1

我已經搜索瞭解決這個問題的方法,但一直無法找到。Android - 如何重新顯示主要活動

我遇到的問題是鬧鐘響起,但MainActivity已關閉,不會重新顯示。

在下面的代碼我怎樣才能重新顯示MainActivity

public class AlarmReceiver extends WakefulBroadcastReceiver { 

@Override 
public void onReceive(final Context context, Intent intent) { 
    //this will update the UI with message 
    AlarmActivity inst = AlarmActivity.instance(); 
    inst.setAlarmText("Alarm! Wake up! Wake up!"); 

    //this will sound the alarm tone 
    //this will sound the alarm once, if you wish to 
    //raise alarm in loop continuously then use MediaPlayer and setLooping(true) 
    Uri alarmUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM); 
    if (alarmUri == null) { 
     alarmUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
    } 
    Ringtone ringtone = RingtoneManager.getRingtone(context, alarmUri); 
    ringtone.play(); 

    //this will send a notification message 
    ComponentName comp = new ComponentName(context.getPackageName(), 
      AlarmService.class.getName()); 
    startWakefulService(context, (intent.setComponent(comp))); 
    setResultCode(Activity.RESULT_OK); 
} 

}

的代碼是我下載作爲一個例子,從JavaPapers一起工作代碼

http://javapapers.com/android/android-alarm-clock-tutorial/

+0

請問您可以爲'AlarmService'發佈代碼? – Pr38y

+0

代碼在這裏:http://javapapers.com/android/android-alarm-clock-tutorial/ – briano

回答

0

我的建議 發送廣播並讓接收器/服務啓動爲你的活動

0

我確實試圖使用廣播,但它沒有工作,所以可能我所做的不完整。

儘管下面的代碼確實起作用(最後添加了3行),但在我看來這是錯誤的,因爲我認爲它創建了一個MainActivity的新實例。 MainActivity是原始版本中的AlarmActivity。

的代碼,「工程」在AlarmService.java如下:

private void sendNotification(String msg) { 
    Log.d("AlarmService", "Preparing to send notification...: " + msg); 
    alarmNotificationManager = (NotificationManager) this 
      .getSystemService(Context.NOTIFICATION_SERVICE); 

    PendingIntent mPendingIntent = PendingIntent.getActivity(this, 0, 
      new Intent(this, MainActivity.class), 0); 

    NotificationCompat.Builder alarmNotificationBuilder = new NotificationCompat.Builder(
      this).setContentTitle("Alarm").setSmallIcon(R.mipmap.ic_launcher) 
      .setStyle(new NotificationCompat.BigTextStyle().bigText(msg)) 
      .setContentText(msg); 

    alarmNotificationBuilder.setContentIntent(mPendingIntent); 
    alarmNotificationManager.notify(1, alarmNotificationBuilder.build()); 
    Log.d("AlarmService", "Notification sent."); 

    Intent mIntentMain = new Intent(this, MainActivity.class); 
    mIntentMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_NO_USER_ACTION); 
    this.startActivity(mIntentMain); 
} 

,我加的是最後3行相關的代碼。我把它放到AlarmService.java中,因爲它擴展了IntentService。在第一篇文章(上面)中發佈的原始代碼來自擴展了WakefulBroadcastReceiver的AlarmReceiver.java。我認爲我應該做的是讓現有的MainActivity顯示而不是創建另一個MainActivity。

編輯:29月-2016

由於主要活動可能已經顯示出來,我終於做了處理這種情況如下:

if (fn_IsMainActivityDisplayed(this) == false) { 
     System.out.println("Main activity is not running. Now recreating"); 
     try { 
      PendingIntent mPendingIntent = PendingIntent.getActivity(this, 0, 
        new Intent(this, MainActivity.class), PendingIntent.FLAG_ONE_SHOT); 
      mPendingIntent.send(Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY); 
     } catch (Exception jExc) { 
  System.out.println("AlarmService: PendingIntent failed: Error = " + jExc.getMessage()); 
     } 
    } 

的在SO上找到確定主要活動是否顯示的代碼。我不確定這是否100%正確,但它似乎工作正常。

相關問題