android - 多 Intent 处理由于方向改变

标签 android android-intent android-activity oncreate landscape-portrait

我的主要 Activity 处理一个 ACTION_SEND Intent 。我根据 Intent 文本中收到的数据在数据库中放置了一条新记录。我的问题是,android 显然在方向改变后保留了这个 Intent ,所以每次我旋转手机时,我的数据库中都会多出一行。

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.db_list);

    Intent intent = getIntent();
    String action = intent.getAction();
    String type = intent.getType();

    if (Intent.ACTION_SEND.equals(action) && type != null) {
        if ("text/plain".equals(type)) {
            storeTextInDatabase(intent);
        }
    }

    fillListFromDB();
    registerForContextMenu(getListView());

} 

我怎样才能在每次收到新的 Intent 后仅调用一次 storeTextInDatabase(intent)。 我的第一个想法是,我将检查 savedInstanceState 包的内容,如果它为 null,那么它是 Activity 的第一次调用。这个解决方案有一个问题,我想处理在我的 Activity 生命周期内广播的多个 Intent 。

最佳答案

尝试处理 Intent,然后删除刚刚处理的额外内容,即:

intent.removeExtra(Intent.EXTRA_TEXT);

它对我有用。 仅在 2.3 tough 上测试。

关于android - 多 Intent 处理由于方向改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19435981/

相关文章:

android - 以 HTML 格式发送电子邮件

android - 在 ListView 中获取选定行的数据

android - 如何为部分 Android Activity 创建通用代码?

android - 如何设置 Intent 过滤器仅在发送联系人时发送操作?

java - 为什么对 Context 的引用是内存泄漏?

当内存不足时,Android 不会从堆栈中杀死 Activity

v7 支持库 ActionBar 的 Android Proguard 配置

android - 发布 Wear OS 表盘和 Android 配套应用

android - Android LinearLayout中TextView的拖动实现方法

java - Android studio - MainActivity 没有一遍又一遍地声明