9

Trong tập tin sở thích của tôi, tôi đi nàyBắt đầu Hoạt động từ màn hình ưu tiên (mục đích định nghĩa trong file xml)

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

Hoạt động này được tạo ra trong file manifest, nhưng tôi vẫn nhận được

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

thế nào thế nào tôi có thể bắt đầu hoạt động từ màn hình tùy chọn?

+0

Liệu hoạt động của bạn mở rộng [PreferenceActivity] (http://developer.android.com/reference/android/preference/PreferenceActivity.html)? –

+0

vâng tôi làm mở rộng PreferenceActivity – Lukap

Trả lời

4

Đây không phải là cách phù hợp để bắt đầu ý định từ xml. Trường "android: action" không phải là tên của hoạt động bạn đang cố bắt đầu; nó mô tả một hành động cho một bộ lọc ý định (chẳng hạn như android.intent.action.VIEW hoặc android.intent.action.EDIT) mà một hoạt động khác có thể cung cấp.

Xem câu trả lời này cho việc sử dụng đúng đắn về <intent>, android: hành động, vv: https://stackoverflow.com/a/3751306/582004

Hãy chắc chắn rằng trong AndroidManifest.xml của bạn, hoạt động của bạn có chứa một <intent-filter> với <action> rằng bạn đang yêu cầu trong PreferenceActivity của bạn (trong câu trả lời được tham chiếu, đây là android.intent.action.VIEW).

27

Tôi đã gặp vấn đề tương tự nhưng không có giải pháp nào tôi tìm kiếm trên stackoverflow đã giải quyết ngoại lệ activitynotfound của tôi.

Dưới đây là giải pháp làm việc tôi tìm thấy từ here:

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

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

</PreferenceScreen> 

thiết lập một bộ lọc ý định trong hoạt động của bạn trong manifest.xml

<activity ...> 
      <intent-filter> 
       <action android:name="your.action.string"/> 
       <category android:name="android.intent.category.DEFAULT" /> 
      </intent-filter> 
</activity> 
+1

Cảm ơn người đàn ông! điều này cũng giúp tôi. –

+1

Cảm ơn, điều này phù hợp với tôi. – Jonas

5

Trong biểu hiện của bạn:

Đây là định nghĩa cho hoạt động của bạn được gọi là [gói của bạn] .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> 

Ngoài ra, hãy thử sử dụng một PreferenceScreen:

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

để biết thêm chi tiết xin vui lòng xem liên kết này ... starting an activity from preferences.xml

3

thử này

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

Bạn nên làm điều gì đó như thế này trong tuyên bố ý định của bạn bên trong sở thích xml:

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

Lưu ý:targetPackage nên giống như package bất động sản tuyên bố bên trong thẻ manifest của AndroidManifest.xml. Điều này đôi khi khó hiểu, vì vậy hãy đọc lại.

Vì vậy, tương đương AndroidManifest.xml sẽ phải tuyên bố như thế này:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="abc.def.efg"> 
<application> 
    .... 
    <activity android:name=".hig.yourClassName"/> 
</application> 
</manifest> 
Các vấn đề liên quan