2 csh 34 csh_34 于 2012.11.06 11:02 提问

使用<intent-filter>创建Main activity

我先用以下方式声明了mian activity:

<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-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);

3个回答

nana4ever
nana4ever   2012.11.07 11:08
已采纳

先指定两个intent filters:

<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>

然后使用action名称开启activity:

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

或者使用class名称:

Intent intent = new Intent(context, MyActivity.class);
context.startActivity(intent);
nana4ever
nana4ever 刚编辑添加了默认分类,这下应该没有问题了,不好意思啊。
大约 5 年之前 回复
csh_34
csh_34 我发现使用action名称的时候,在第二个<intent-filter>添加<category android:name="android.intent.category.DEFAULT"/> 也是可以实现的。
大约 5 年之前 回复
csh_34
csh_34 Intent intent = new Intent("com.package.name.MyAction"); context.startActivity(intent); 不能找到activity来处理intent。但是使用class名可以实现。
大约 5 年之前 回复
Baby_Bonnie
Baby_Bonnie   2012.11.06 15:43

在action标签中的属性名称要与action的名称相同,而不应该是activity的名称。所以删掉那一行:

 <action android:name="com.package.name.MyActivity"/>
yongyong_21
yongyong_21   2012.11.07 13:46

你的class名称不是com.package.name.MyActivity,应该是com.package.name.general.MyActivity。一个简单的解决方法是用一个类创建一个新的intent,不是用一个报名创建。你可以使用自动完成填写正确的类。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!