【问题标题】:How to start an activity using a custom intent?如何使用自定义意图启动活动?
【发布时间】:2021-02-07 17:44:02
【问题描述】:

我有一个非常简单的应用程序(教科书中的一个例子),它包含两个活动:第一个活动UsingIntentActivity 有一个按钮。当这个按钮被点击时,它必须导致第二个活动SecondActivity,它将在屏幕上显示一个文本。

我可以使用startActivity(new Intent(this, SecondActivity.class)); 实现这一点

然而,在我遇到这个例子的教科书中,使用了相同方法的另一种形式:

startActivity(new Intent("net.dreamingpixel.SecondActivity"));

在Manifest File 中创建了一个匹配的自定义意图(据我所知):

    <activity
        android:name=".UsingIntentActivity"
        android:label="@string/title_activity_using_intent" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name=".SecondActivity"
        android:label="Second Activity" >
        <intent-filter>
            <action android:name="net.dreamingpixel.SecondActivity" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>

所以有一个意图过滤器,它的类别设置为DEFAULT。但是当我尝试像这样运行应用程序并单击UsingIntentActivity 的按钮时,应用程序崩溃了。在 log cat 中,我可以看到以下消息:

FATAL EXCEPTION: main
java.lang.IllegalStateException: Could not execute the method of the activity

然后它指向我在本文开头写的startActivity方法的调用。

有人遇到过类似的问题吗?我是不是在某个地方弄错了?

更新:我还注意到Manifest 文件中我打开第二个活动标签的行中有一个警告。它说:导出的活动不需要许可

也许这个警告与我的问题有关..

【问题讨论】:

  • 您是否将您的包裹命名为“net.dreamingpixel”?
  • 包名是“net.dreamingpixel.usingintent”。有错吗?
  • 是的,你应该把它命名为“net.dreamingpixel”或者把你的电话改成startActivity(new Intent("net.dreamingpixel.usingintent.SecondActivity"));
  • 我已经试过了。它没有帮助..

标签: android android-intent android-activity


【解决方案1】:

当您发送时,您已根据清单文件在清单文件中创建了第二个活动

startActivity(new Intent("net.dreamingpixel.SecondActivity"));

这里net.dreamingpixel.SecondActivity的意思是,这里你需要提供你在项目中创建的包的活动名称...

在顶部的清单中,您会找到包名。您需要在您的活动中使用该包名称...

这里按照上面的代码..

    net.dreamingpixel ----- is a package
      SecondActivity  ----- is an Activity in that package.

【讨论】:

  • 不,那只是一个意图过滤器,你可以在里面写任何字符串,只要你在清单的意图过滤器中也写相同的字符串
  • 我将意图的名称更新为net.dreamingpixel.usingintent 为@ofir-a。建议,但这并没有解决我的问题。 Android 文档说:“使用给定操作创建一个意图。所有其他字段(数据、类型、类)为空。请注意,该操作必须在命名空间中,因为 Intent 在系统中全局使用——例如系统VIEW 操作是 android.intent.action.VIEW;应用的自定义操作类似于 com.google.app.myapp.CUSTOM_ACTION。"
  • 否则做一件事..当您在 startActivity(new intent("....")) 中编写意图时,将其更改为 Intent it = new Intent ("net.dreamingpixel.SecondActivity ");开始活动(它);这会很愚蠢,因为它们都是相同的,但有时它会起作用。
  • @Limbo Wanderer 我想纠正自己。当您使用意图过滤器时,您只需在清单文件和意图调用中编写相同的内容。所以如果你写下一个东西'startActivity(new Intent("dreamingpixel.SecondActivity"));'并且在清单中你写 '' 它应该可以工作。除此之外,我不知道这里的确切问题是什么。
  • @code_finder 感谢您的帮助,但不,这也不起作用。也许我应该创建一个新的模拟器并在那里尝试?还有其他想法吗?
猜你喜欢
  • 1970-01-01
  • 2011-03-20
  • 2011-12-15
  • 2012-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多