SMSを管理するアプリを作成し、通知を作成しましたが、それらをクリックすると別のアクティビティが開始されます。アクティビティが停止しているかどうかを確認して再開する方法を知りたいです。
保留中のインテントを作成するために使用されるコードは次のとおりです。
private void createNotification(SmsMessage sms, Context context){
final NotificationManager nm = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
String contentTitle = "";
// construct the Notification object.
final NotificationCompat.Builder builder = new NotificationCompat.Builder(context)
.setContentTitle(contentTitle)
.setContentText(sms.getMessageBody())
.setSmallIcon(R.drawable.ic_launcher)
.setLargeIcon(getIconBitmap())
.setNumber(nmessages);
builder.setAutoCancel(true);
//(R.drawable.stat_sample, tickerText,
// System.currentTimeMillis());
// Set the info for the views that show in the notification panel.
//notif.setLatestEventInfo(this, from, message, contentIntent);
/*
// On tablets, the ticker shows the sender, the first line of the message,
// the photo of the person and the app icon. For our sample, we just show
// the same icon twice. If there is no sender, just pass an array of 1 Bitmap.
notif.tickerTitle = from;
notif.tickerSubtitle = message;
notif.tickerIcons = new Bitmap[2];
notif.tickerIcons[0] = getIconBitmap();;
notif.tickerIcons[1] = getIconBitmap();;
*/
// Creates an explicit intent for an Activity in your app
Intent resultIntent = new Intent(context, BasicActivity.class);
resultIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
// Because clicking the notification opens a new ("special") activity, there's
// no need to create an artificial back stack.
PendingIntent resultPendingIntent =
PendingIntent.getActivity(
context,
0,
resultIntent,
PendingIntent.FLAG_UPDATE_CURRENT
);
// Ritardo in millisecondi
builder.setContentIntent(resultPendingIntent);
nm.notify(R.drawable.ic_drawer, builder.build());
FLAG_UPDATE_CURRENTのようなPendingIntentにフラグを設定する必要があります。
これがすべてです。 http://developer.Android.com/reference/Android/app/PendingIntent.html
編集1:私は質問を誤解しました。
同じ問題が発生したが解決されたトピックへのリンクは次のとおりです。
以前に一時停止したアクティビティを再開する意図(通知から呼び出されます)
完全な解決策については上記の回答をお読みになり、それが機能するかどうかをお知らせください。
これで試してみてください。
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
mContext).setSmallIcon(R.drawable.ic_launcher)
.setContentTitle(mContext.getString(R.string.notif_title))
.setContentText(mContext.getString(R.string.notif_msg));
mBuilder.setAutoCancel(true);
// Set notification sound
Uri alarmSound = RingtoneManager
.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
mBuilder.setSound(alarmSound);
Intent resultIntent = mActivity.getIntent();
resultIntent.addCategory(Intent.CATEGORY_LAUNCHER);
resultIntent.setAction(Intent.ACTION_MAIN);
PendingIntent pendingIntent = PendingIntent.getActivity(mContext, 0, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT);
mBuilder.setContentIntent(pendingIntent);
NotificationManager mNotificationManager = (NotificationManager) mContext
.getSystemService(Context.NOTIFICATION_SERVICE);
// mId allows you to update the notification later on.
mNotificationManager.notify(mId, mBuilder.build());
この行を、アプリのマニフェストファイルの対応するアクティビティに追加します。
Android:launchMode = "singleTask"
例えば:
<activity
Android:name=".Main_Activity"
Android:label="@string/title_main_activity"
Android:theme="@style/AppTheme.NoActionBar"
Android:launchMode="singleTask" />
多くの検索を行った後、実際に私のために働いた唯一の解決策は、次のことを行うことです:
ここでは、現在のスタックを維持したままアプリケーションを起動するだけです。
//here you specify the notification properties
NotificationCompat.Builder builder = new NotificationCompat.Builder(this).set...(...).set...(..);
//specifying an action and its category to be triggered once clicked on the notification
Intent resultIntent = new Intent(this, MainClass.class);
resultIntent.setAction("Android.intent.action.MAIN");
resultIntent.addCategory("Android.intent.category.LAUNCHER");
PendingIntent resultPendingIntent = PendingIntent.getActivity(this, 0, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT);
//building the notification
builder.setContentIntent(resultPendingIntent);
NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.notify(0, builder.build());
前述の解決策が機能しなかった場合は、androidManifest.xmlファイルのアクティビティ起動モードを標準からsingleTaskに変更してみてください。
<activity>
...
Android:launchMode="singleTask
...
</activity>
これにより、アクティビティに複数のインスタンスが含まれるのを防ぐことができます。