Notification中使用TaskStackBuilder

现在大多数android应用都是在通知栏中如果有Notification通知的话,点击它,然后会直接跳转到对应的应用程序的某个界面,这时如果回退,即按下Back键,会返回到该应用程序的主界面,而不是系统的主界面。所以仅使用PendingIntent的做法达不到目的。这里我们使用TaskStackBuilder来做。

public class MainActivity extends Activity {

    @SuppressLint("NewApi")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        NotificationManager notificationManager= (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this)
        .setSmallIcon(R.drawable.ic_launcher).setContentTitle("test title").setContentText("test");
        
        Intent resultIntent = new Intent(this,MainTestActivity.class);
        TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
        stackBuilder.addParentStack(MainTestActivity.class);
        stackBuilder.addNextIntent(resultIntent);
        PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0,PendingIntent.FLAG_UPDATE_CURRENT);
        mBuilder.setContentIntent(resultPendingIntent);
        
        Notification  notification = mBuilder.build();
        notification.defaults = Notification.DEFAULT_ALL;
        notificationManager.notify(1, notification);
    }
}
public class MainTestActivity extends Activity{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        TextView tv = new TextView(this);
        tv.setText("MainTestActivity...");
        setContentView(tv);
    }
}
<application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".MainTestActivity"
            android:label="@string/app_name" 
            android:parentActivityName=".MainActivity">
            <meta-data  
                android:name="android.support.PARENT_ACTIVITY"  
                android:value="com.example.test.MainActivity" />  
        </activity>
    </application>

效果: 这样当点击通知进入MainTestActivity页面后,点击返回键,此时不是回到桌面,而是回到自己的MainActivity页面中

 

posted @ 2016-09-08 13:50  水火379  阅读(831)  评论(0)    收藏  举报