Android : preferences.xml에서 활동 시작
<intent> 태그를 사용하여 기본 preferences.xml에서 활동을 시작하고 싶습니다. 활동은 잘 테스트되었지만 문제는 그 문제가 아닙니다. (내 앱에서 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 항목"을 눌러도 Activity가 호출되지 않고 아무 일도 일어나지 않습니다. LogCat은 "명확"하고 오류나 경고가 없습니다. 검색을 많이했는데 해결책을 찾지 못했습니다. 뭔가 놓친 것 같습니다 ... 도와주세요!
나는 같은 문제를 겪고 있었다. 내 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>
그런 다음 내 환경 설정 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>
<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>
주의! 의 값은 파일 targetPackage의 루트 요소 AndroidManifest.xml(Gradle 빌드 파일에서 정의)에 선언 된 앱의 패키지 ID 여야합니다 . Activity 클래스의 Java 패키지와 동일 할 필요는 없습니다 (일반적으로 사람들은이 패키지를의 하위 패키지에 넣습니다 "ui").
따라서 특정의 경우에, 나는 당신이 내기를 targetPackage해야한다 "my.notifier",하지 "my.notifier.ui"(내가 확인하기 위해 매니페스트를 참조 할 것).
IntentFilter를 추가 할 필요가 없습니다. 정규화 된 이름으로 활동을 참조 할 수 있습니다.
<intent android:targetPackage="my.notifier.ui"
android:targetClass="my.notifier.ui.EditCoursesNamesActivity"/>
이 문제가 발생했을 때는 활동을위한 서브 패키지를 만들었 기 때문입니다. 루트 패키지로 옮겼을 때 기본 설정 화면에서 시작할 수 있습니다.
이 솔루션은 활동을 기본 설정 헤더에 연결하는 방법을 보여줍니다.
먼저 대상 활동은 다음과 같이 매니페스트에서 선언되어야합니다.
<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>
그리고 그게 전부입니다.
나는 같은 문제를 겪고 있었다. 이것으로 해결
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>
인 텐트 필터의 카테고리를 다음과 같이 변경하여이 문제를 해결할 수있었습니다.
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>
targetPackage and targetClass(prefix) may differ because of refactoring package name. Easy way to check it you can delete activity in manifest and call startActivity() then you will see this error in logCat: "Unable to find explicit activity class {'targetPackage'/'targetClass'}". Those are the right names you should write into Preference>intent. Intent-filter is not needed.
I solved the same issue by declaring the <intent-filter> in the manifest as follows:
<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>
<Preference>
<intent
android:targetPackage="applicationIdFromBuildGradle"
android:targetClass="targetClassFromJavaFile.YourClassName"/>
</Preference>
참고URL : https://stackoverflow.com/questions/7275015/android-start-activity-from-preferences-xml
'Nice programing' 카테고리의 다른 글
| 파이썬 슬라이스 방법, 파이썬 슬라이스를 알고 있지만 내장 슬라이스 객체를 어떻게 사용할 수 있습니까? (0) | 2020.11.20 |
|---|---|
| Go의 Null 값 (0) | 2020.11.20 |
| jQuery 확인 (0) | 2020.11.19 |
| C에서 비트 필드를 언제 사용합니까? (0) | 2020.11.19 |
| SublimeText 3에서 키보드로 열 / 수직 선택 (0) | 2020.11.19 |