16

在我的偏好文件中,我去这个

    <PreferenceCategory android:title="Title" >
        <Preference android:title="title" >
    <intent android:action="com.my.package.MainActivity" 
            />
</Preference>
    </PreferenceCategory>

活动是在清单文件中创建的,但我仍然得到

android.content.ActivityNotFoundException: No Activity found to handle Intent { act=com.my.package.MainActivity }

如何从首选项屏幕开始活动?

4

6 回答 6

32

我有同样的问题,但我在 stackoverflow 上搜索的解决方案都没有解决我的 activitynotfound 异常。

这是我从这里找到的工作解决方案:

    <PreferenceScreen  
                android:title="@string/title_intent_preference"  
                android:summary="@string/summary_intent_preference">  

            <intent android:action="your.action.string"/>  

 </PreferenceScreen>  

在 manifest.xml 中的活动中设置意图过滤器

    <activity ...>  
            <intent-filter>  
                <action android:name="your.action.string"/>  
                <category android:name="android.intent.category.DEFAULT" />  
            </intent-filter>  
</activity>
于 2013-06-05T15:08:04.930 回答
6

这不是从 xml 开始意图的正确方法。该android:action字段不适用于您尝试开始的活动的名称;它描述了另一个活动可以提供的意图过滤器的动作(例如android.intent.action.VIEW或)。android.intent.action.EDIT

请参阅此答案以正确使用<intent>、android:action 等:https ://stackoverflow.com/a/3751306/582004

确保在您的 AndroidManifest.xml 中,您的活动包含一个<intent-filter> 和<action您在 PreferenceActivity 中请求的 > (在引用的答案中,这是android.intent.action.VIEW)。

于 2013-05-02T23:35:50.863 回答
6

尝试这个

 <intent android:targetPackage="your.package"
 android:targetClass="your.package.yourMainClassName"/>
于 2016-02-12T12:13:04.413 回答
5

在您的清单中:

这是名为 [your package].MainActivity 的活动的定义。

<activity android:name=".MainActivity">
 <intent-filter>
      <action android:name="example.action.ACTION_MAIN_ACTIVITY" />
      <category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>

另外,尝试使用 PreferenceScreen:

<PreferenceScreen android:title="@string/my_location_settings">
    <intent android:action="example.action.ACTION_MAIN_ACTIVITY">
    </intent>
</PreferenceScreen>

有关更多详细信息,请参阅此链接... 从preferences.xml 开始活动

于 2013-06-06T10:57:09.377 回答
3

您应该在首选项 xml 中的意图声明中执行以下操作:

<intent android:targetPackage="abc.def.efg"
 android:targetClass="abc.def.efg.hig.yourClassName"/>

注意: targetPackage应该与标签package内声明的属性相同。这有时令人困惑,所以请再读一遍。manifestAndroidManifest.xml

所以等价AndroidManifest.xml的会有这样的声明:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="abc.def.efg">
<application>
   ....
    <activity android:name=".hig.yourClassName"/>
</application>
</manifest>
于 2018-03-02T07:20:12.687 回答
0

要从首选项屏幕开始活动,您只需修改您的首选项 XML,例如

<Preference
    app:key="your_key"
    app:title="@string/title"
    app:summary="@string/summary">

    <intent
        android:targetPackage="your.package"
        android:targetClass="your.package.ActivityClass"/>
</Preference>

或者,如果您需要传递操作,只需将操作字符串放在意图属性中,例如

<Preference
    app:key="your_key"
    app:title="@string/title"
    app:summary="@string/summary">

    <intent
        android:targetPackage="your.package"
        android:targetClass="your.package.ActivityClass"
        android:action="your.package.ACTION"/>
</Preference>
于 2020-02-23T13:01:48.367 回答