6

当我以这种方式宣布我的主要活动时:

<activity android:name=".MyActivity"
          android:configChanges="orientation|keyboardHidden"
          android:windowSoftInputMode="stateHidden"
          android:screenOrientation="portrait">
    <intent-filter>
          <action android:name="android.intent.action.MAIN"/>
          <action android:name="com.package.name.MyActivity"/>
          <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

No Activity found to handle Intent { act=com.package.name.MyActivity flg=0x24000000 }然后当我使用此代码时出现错误:

Intent intent = new Intent("com.package.name.MyActivity");
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
context.startActivity(intent);

如果不使用Intent i = new Intent(this, MyActivity.class);,我该如何在actionfor的帮助下做到这一点<intent-filter>

没有帮助:

 <intent-filter>
      <action android:name="android.intent.action.MAIN"/>
      <action android:name="com.package.name.VIEW"/>
      <category android:name="android.intent.category.LAUNCHER" />
 </intent-filter>

代码:

Intent intent = new Intent("com.package.name.VIEW");
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
context.startActivity(intent);
4

3 回答 3

8

尝试指定两个意图过滤器:

<activity android:name=".MyActivity"
          android:configChanges="orientation|keyboardHidden"
          android:windowSoftInputMode="stateHidden"
          android:screenOrientation="portrait">
    <intent-filter>
          <action android:name="android.intent.action.MAIN"/>
          <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    <intent-filter>
          <action android:name="com.package.name.MyAction"/>
          <category android:name="android.intent.category.DEFAULT"/>
    </intent-filter>
</activity>

然后您可以使用操作名称启动活动:

Intent intent = new Intent("com.package.name.MyAction");
context.startActivity(intent);

或类名:

Intent intent = new Intent(context, MyActivity.class);
context.startActivity(intent);
于 2012-07-28T18:27:00.907 回答
1

标签中的name属性action是动作的名称,而不是您的活动的名称。删除线,

  <action android:name="com.package.name.MyActivity"/>

由于意图过滤器标签位于您的活动标签下,因此系统已经知道它已应用于该活动。

于 2012-07-28T17:25:03.133 回答
0

你的班级名称不是com.package.name.MyActivity,它是com.package.name.general.MyActivity

避免这个错误的一个简单方法是使用类而不是包名来创建新的 Intent。您可以使用自动完成来填写正确的课程。

您说您不想通过指定类来创建 Intent。我想知道为什么不——我认为这是一个好方法。

于 2012-07-28T17:31:52.807 回答