从首选项屏幕启动活动(在xml文件中定义的意图)

时间:2013-02-11 10:35:47

标签: android android-intent android-activity android-preferences

在我的偏好文件中,我去了

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

如何从偏好设置屏幕启动活动?

6 个答案:

答案 0 :(得分:30)

我遇到了同样的问题,但我在stackoverflow上搜索的解决方案都没有解决我的activity notfound Exception。

以下是我从here找到的工作解决方案:

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

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

 </PreferenceScreen>  

在manifest.xml

中的活动中设置一个intent过滤器
    <activity ...>  
            <intent-filter>  
                <action android:name="your.action.string"/>  
                <category android:name="android.intent.category.DEFAULT" />  
            </intent-filter>  
</activity>

答案 1 :(得分:5)

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

有关正确使用<intent&gt;,android:action等的信息,请参阅此答案:https://stackoverflow.com/a/3751306/582004

确保您的AndroidManifest.xml中的活动包含<intent-filter&gt;使用<action&gt;您在PreferenceActivity中请求的内容(在引用的答案中,这是android.intent.action.VIEW)。

答案 2 :(得分:5)

在你的清单中:

这是您的活动的定义,名为[您的包裹] .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>

有关详细信息,请参阅此链接... starting an activity from preferences.xml

答案 3 :(得分:4)

试试这个

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

答案 4 :(得分:2)

您应该在首选项xml:

中的intent声明中执行类似的操作
<intent android:targetPackage="abc.def.efg"
 android:targetClass="abc.def.efg.hig.yourClassName"/>

注意: targetPackage应与package manifest标记内声明的AndroidManifest.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>

答案 5 :(得分: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>

或者,如果您需要传递动作,只需将动作字符串放入intent属性之类的

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