Android:从preferences.xml启动Activity

Lam*_*ama 64 android preferenceactivity android-intent

我想从默认的preferences.xml启动一个Activity,带有<intent>标签.活动经过充分测试,问题不在于此.(我在我的应用程序中扩展了PreferenceActivity,所以preferences.xml"来了")请查看代码,出了什么问题?

的preferences.xml:

.... 
<PreferenceCategory 
    android:title="@string/titleEtcSetup">
    <PreferenceScreen
        android:key="renameCourses"
        android:title="@string/titleRenameCourses"
        android:summary="@string/textRenameDisplayedCoursesNames">
        <intent
             android:action="android.intent.action.VIEW"
             android:targetPackage="my.notifier.ui"
             android:targetClass="my.notifier.ui.EditCoursesNamesActivity" />         
    </PreferenceScreen>
.....
</PreferenceCategory>
..... 
Run Code Online (Sandbox Code Playgroud)

manifest.xml文件:

....
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="my.notifier.ui"....
....
<activity android:name=".EditCoursesNamesActivity" android:label="@string/titleRenameCourses">
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
 .....
Run Code Online (Sandbox Code Playgroud)

当我按下"renameCourses项目"时,活动没有调用,没有任何反应.LogCat是"清除",没有错误或警告.我经常搜索,我找不到解决方案,也许我只是错过了一些东西......请帮助!

Shy*_*gar 64

我遇到了同样的问题.我通过在AndroidManifest.xml中声明操作来实现此功能,如下所示:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.example.myapp" android:versionName="1.3" android:versionCode="4">

...

    <activity android:name=".activities.MyActivity" 
              android:label="@string/my_activity_title"
              android:theme="@android:style/Theme.Black.NoTitleBar">
        <intent-filter>
           <action android:name="com.example.myapp.activities.MyActivity" />
           <category android:name="android.intent.category.DEFAULT" />
       </intent-filter>
    </activity>
Run Code Online (Sandbox Code Playgroud)

然后在我的Preferences xml文件中:

<PreferenceCategory
        android:title="@string/my_activity_title">
    <PreferenceScreen
        android:title="@string/my_activity_title" 
        android:summary="@string/my_activity_title">
        <intent android:action="com.example.myapp.activities.MyActivity"/>
    </PreferenceScreen>
</PreferenceCategory>
Run Code Online (Sandbox Code Playgroud)

  • 据我所知,响应动作`.activities.MyActivity`的任何其他应用程序也有资格记录已启动的Intent.这是不合适的,特别是如果你有自由/专业版的应用程序. (10认同)

Mic*_*ael 48

我相信<intent>标签必须在里面<Preference>,而不是<PreferenceScreen>.

<PreferenceCategory 
    android:title="@string/titleEtcSetup">
    <Preference
        android:key="renameCourses"
        android:title="@string/titleRenameCourses"
        android:summary="@string/textRenameDisplayedCoursesNames">
        <intent
             android:action="android.intent.action.VIEW"
             android:targetPackage="my.notifier.ui"
             android:targetClass="my.notifier.ui.EditCoursesNamesActivity" />         
    </Preference>
.....
</PreferenceCategory>
Run Code Online (Sandbox Code Playgroud)


BoD*_*BoD 32

警告!值targetPackage应该是应用程序的包ID,如在AndroidManifest.xml文件的根元素(在Gradle构建文件中定义)中声明的那样.它不一定与Activity类的Java包相同(人们通常将它们放在子包中"ui").

所以在你的具体情况下,我打赌你targetPackage应该是"my.notifier",而不是"my.notifier.ui"(我必须看到清单确定).

  • 在gradle中使用不同的buildtypes/productFlavors时请记住这一点! (3认同)

dvi*_*v90 18

无需添加IntentFilter.您可以通过完全限定名称来引用活动:

<intent android:targetPackage="my.notifier.ui"
    android:targetClass="my.notifier.ui.EditCoursesNamesActivity"/>
Run Code Online (Sandbox Code Playgroud)