web-dev-qa-db-ja.com

設定画面からアクティビティを開始します(xmlファイルで定義されたインテント)

私の好みのファイルで私はこれに行きます

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

設定画面からアクティビティを開始するにはどうすればよいですか?

15
Lukap

私は同じ問題を抱えていましたが、stackoverflowで検索したソリューションのどれも私のactivitynotfound例外を解決しませんでした。

これが私が見つけた実用的な解決策です ここ

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

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

 </PreferenceScreen>  

マニフェスト.xml内のアクティビティにインテントフィルターを設定します

    <activity ...>  
            <intent-filter>  
                <action Android:name="your.action.string"/>  
                <category Android:name="Android.intent.category.DEFAULT" />  
            </intent-filter>  
</activity>
30
Mehdi Fanai

あなたのマニフェストで:

これは、[パッケージ] .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からアクティビティを開始します

5
Priyank Patel

これは、xmlからインテントを開始する正しい方法ではありません。 Android:actionフィールドは、開始しようとしているアクティビティの名前ではありません。別のアクティビティが提供できるインテントフィルタ(Android.intent.action.VIEWAndroid.intent.action.EDITなど)のアクションについて説明します。

<intent>、Android:actionなどの正しい使用法については、この回答を参照してください: https://stackoverflow.com/a/3751306/582004

AndroidManifest.xmlで、アクティビティに<intent-filter>とPreferenceActivityで要求している<action>が含まれていることを確認してください(参照されている回答では、これはAndroid.intent.action.VIEWです)。

5
liucheia

これを試して

 <intent Android:targetPackage="your.package"
 Android:targetClass="your.package.yourMainClassName"/>
4
tarik203

プリファレンスxml内のインテント宣言で次のようなことを行う必要があります。

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

注:targetPackageは、AndroidManifest.xmlpackageタグ内で宣言されたmanifestプロパティと同じである必要があります。これは時々混乱するので、もう一度読んでください。

したがって、同等のAndroidManifest.xmlには、次のような宣言があります。

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

設定画面からアクティビティを開始するには、次のように設定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>
0
Gilbert Arafat