4

AndroidでPhonegap通知を操作する方法を独学で学んでいます。通知を表示するのはかなり簡単なプロセスのように見えますが、

public void triggerTestNotification(String tag, int id,Context ctxt) 
{
  Intent notificationIntent = new Intent(context, PallActivity.class);
  notificationIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | 
  Intent.FLAG_ACTIVITY_CLEAR_TOP);

  notificationIntent.setAction(Intent.ACTION_MAIN);
  notificationIntent.addCategory(Intent.CATEGORY_LAUNCHER);

  PendingIntent contentIntent = PendingIntent.getActivity(ctxt, 0,  
  notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);

  Notification not = new Notification.Builder(ctxt)
  .setContentTitle("Title").setContentText("Title")
  .setTicker("Tick tock")
  .setAutoCancel(true) 
  .setContentIntent(contentIntent)
  .setSmallIcon(ctxt.getApplicationInfo().icon).build();
   NotificationManager notificationManager = (NotificationManager)    
   ctxt.getSystemService(Context.NOTIFICATION_SERVICE);
   notificationManager.notify(tag, id, not);
 }

私がかなり難しいと感じたのは次のとおりです

  • ユーザーがアプリを起動します
  • ユーザーが離れて別のことを始めた - アプリがバックグラウンドになっている
  • 通知が届く
  • 表示されています
  • ユーザーが通知をクリックします。

この時点で、アプリはフォアグラウンドに戻るはずです。私は自分のインテントコードを考えました

public class PallActivity extends Activity
{
  @Override
  public void onCreate(Bundle savedInstanceState)
  {
   super.onCreate(savedInstanceState);
  finish();
  forceMainActivityReload();
 }

 private void forceMainActivityReload()
 {
  PackageManager pm = getPackageManager();
  Intent launchIntent =    
  pm.getLaunchIntentForPackage(getApplicationContext().getPackageName());           
  startActivity(launchIntent);
 }

 @Override
 protected void onResume() 
 {
  super.onResume();
  final NotificationManager notificationManager = (NotificationManager) 
  this.getSystemService(Context.NOTIFICATION_SERVICE);
  notificationManager.cancelAll();
 }

}

これに対処しますが、何もしません。明らかに、ここで何か問題が発生しています。おそらくインテント フラグです。私を正しい軌道に乗せることができる人には、とても感謝しています

4

1 に答える 1

2

oncreate から削除するfinish();と、どこかに進む前に終了が呼び出されます。

PallActivity を開始する代わりに、そこから2 番目のアクティビティを開始するか、少なくとも PallActivity を 2 番目のアクティビティとして処理しようとしているようです。内からそのようにキックスタートする必要はありませんforceMainActivityReload();。より複雑にして問題を混乱させるのではなく、通知インテントから開始したいアクティビティを開始します。

notification.flags = Notification.FLAG_ONGOING_EVENT | Notification.FLAG_NO_CLEAR;   
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);

使用しているコンテキストが次のとおりであることを確認します。

Context context = getApplicationContext();

そして、コメントで述べたように、これらを通知から削除します。

notificationIntent.setAction(Intent.ACTION_MAIN);
notificationIntent.addCategory(Intent.CATEGORY_LAUNCHER);

必要に応じて、さらに多くの詳細を以下に示します。

通知をクリックするとアクティビティを再開します

Android:通知からアプリを再開する方法は?

通知から活動を再開する

通知再開活動

以前に一時停止したアクティビティを再開する意図 (通知から呼び出されます)

Android: 前の位置からアプリを再開します

新しいインテントを作成するのではなく、通知インテントを再開するにはどうすればよいですか?

于 2016-05-16T17:17:04.570 に答える