我想从默认的preferences.xml启动一个Activity,其中<意图>标签。活动经过充分测试,问题不在于此。 (我正在我的应用程序中扩展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>
.....
的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>
.....
当我按下“renameCourses项目”时,活动没有调用,没有任何反应。 LogCat是“清除”,没有错误或警告。我经常搜索,我找不到解决方案,也许我只是错过了一些东西......请帮助!
答案 0 :(得分:61)
我遇到了同样的问题。我通过在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>
然后在我的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>
答案 1 :(得分:46)
我认为<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>
答案 2 :(得分:31)
小心! targetPackage
的值应该是应用程序的包ID,如AndroidManifest.xml
文件的根元素中所声明的(您在Gradle构建文件中定义)。它不一定与Activity类的Java包相同(人们通常将它们放在"ui"
的子包中)。
因此,在您的具体情况下,我打赌您targetPackage
应该是"my.notifier"
,而不是"my.notifier.ui"
(我必须看清单才能确定)。
答案 3 :(得分:18)
无需添加IntentFilter。您可以通过完全限定名称来引用活动:
<intent android:targetPackage="my.notifier.ui"
android:targetClass="my.notifier.ui.EditCoursesNamesActivity"/>
答案 4 :(得分:4)
当我遇到这个问题时,那是因为我为我的活动制作了一个子包。当我将它移动到根包中时,Preference屏幕可以启动它。
答案 5 :(得分:3)
此解决方案向您展示如何将活动连接到您的首选项标题。
首先,您的目标活动必须在清单中声明如下:
<activity android:name=".ui.activities.MyActivity">
<intent-filter>
<action android:name=".ui.activities.MyActivity" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
请注意,活动和动作的android:name是相同的。
现在在您的preferences.xml文件中,您只需要声明如下标题:
<header
android:title="@string/my_activity_title"
android:summary="@string/my_activity_summary">
<intent android:action=".ui.activities.MyActivity"/>
</header>
这就是它的全部内容。
答案 6 :(得分:2)
我遇到了同样的问题。 并通过这个解决
的AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.coding1.myapp">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="@string/app_name"
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
// ==================== HERE ================================
<activity
android:name="yaran.AccountWorker.AuthenticatorActivity"
android:label="@string/app_name"
>
<intent-filter>
<action android:name="AuthenticatorActivity" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
// ========================================================
<service android:name="yaran.AccountWorker.AuthenticatorService" android:exported="false" android:process=":auth">
<intent-filter>
<action android:name="android.accounts.AccountAuthenticator" />
</intent-filter>
<meta-data android:name="android.accounts.AccountAuthenticator"
android:resource="@xml/authenticator" />
</service>
</application>
并在偏好中:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory
android:title="General Settings" />
<Preference
android:key="account_settings"
android:title="Account Settings"
android:summary="">
<intent
android:action="AuthenticatorActivity"
android:targetPackage="com.example.coding1.myapp"
android:targetClass="yaran.AccountWorker.AuthenticatorActivity" />
</Preference>
</PreferenceScreen>
答案 7 :(得分:1)
我可以通过更改意图过滤器中的类别
来解决此问题android.intent.category.DEFAULT
以强>
android.intent.category.PREFERENCE
http://developer.android.com/reference/android/content/Intent.html#CATEGORY_PREFERENCE
<activity
android:name=".ui.DatapackSelectionActivity"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.NoTitleBar" >
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.PREFERENCE" />
</intent-filter>
</activity>
我想如果你想让你的行动更加具体,只需删除整个类别节点
<activity
android:name=".ui.DatapackSelectionActivity"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.NoTitleBar" >
<intent-filter>
<action android:name="android.intent.action.VIEW" />
</intent-filter>
</activity>
答案 8 :(得分:1)
targetPackage和targetClass(prefix)可能会有所不同。检查它的简单方法您可以删除清单中的活动并调用startActivity()
然后您将在logCat中看到此错误:“无法找到显式活动类{'targetPackage'/'targetClass'}”。这些是您应该写入Preference&gt; intent的正确名称。不需要意图过滤器。
答案 9 :(得分:0)
我通过在清单中声明<intent-filter>
如下解决了同样的问题:
<activity
android:name="PeriodosActivity"
android:label="Periodos"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="Periodos" /> /*Same as in the preference's <intent> element's action attribute*/
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
答案 10 :(得分:0)
<Preference>
<intent
android:targetPackage="applicationIdFromBuildGradle"
android:targetClass="targetClassFromJavaFile.YourClassName"/>
</Preference>
答案 11 :(得分:0)
<Preference>
<intent
android:targetPackage="applicationIdFromBuildGradle"
android:targetClass="targetClassFromJavaFile.YourClassName"/>
请注意在build.gradle(app)中使用packgename
applicationId“ com.some.some”
我的包在清单和类中就像这样的“ com.some.love”
我在跑步时遇到异常。这解决了我
参考@ style-7