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>