9

在我喜欢的文件我走这启动活动

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

如何我可以从首选项屏幕开始活动吗?

+0

你是否延长活动[PreferenceActivity(http://developer.android.com/reference/android/preference/PreferenceActivity.html)? – 2013-02-11 10:39:16

+0

是的,我延长PreferenceActivity – Lukap 2013-02-11 10:43:27

回答

4

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

看到这个答案的正确使用的<intent>,安卓动作等:https://stackoverflow.com/a/3751306/582004

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

27

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

这里是工作的解决方案,我从here发现:

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

谢谢你!这也帮助了我。 – 2014-07-31 23:05:24

+1

谢谢,这对我很有用。 – Jonas 2015-09-29 03:19:02

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> 

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

3

试试这个

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

你应该做的事情喜欢这个在您的意向声明中的偏好XML:

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

注:为AndroidManifest.xmlmanifest标签内声明的package财产targetPackage应该是相同的。这有时令人困惑,所以再读一遍。

所以相当于AndroidManifest.xml必须声明是这样的:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="abc.def.efg"> 
<application> 
    .... 
    <activity android:name=".hig.yourClassName"/> 
</application> 
</manifest>