알림을 표시하기 위해 다른 응용 프로그램에서 호출되는 GWVectraNotifier 활동이 포함 된 응용 프로그램을 만들었습니다.
알림 대화 상자에는 ‘표시’버튼과 ‘닫기’버튼이 있습니다.
‘표시’버튼을 클릭하면 해당 활동이 시작됩니다.
위 애플리케이션의 기능을 확인하려면
checkmail 이벤트 트리거에서 K9Mail 응용 프로그램에서 GWVectraNotifier 활동을 시작했습니다.
GWVectraNotifier 활동을 성공적으로 시작할 수 있지만 ‘show’버튼을 클릭하면 K9mail의 ‘MessageList’활동을 시작해야합니다. 이렇게하려면 아래 코드를 작성했습니다.
Intent i = new Intent();
i.setComponent(new ComponentName("com.fsck.k9", "com.fsck.k9.activity.MessageList"));
i.putExtra("account", accUuid);
i.putExtra("folder", accFolder);
startActivity(i);
던지는 :
WARN/ActivityManager(59): Permission denied: checkComponentPermission() reqUid=10050
WARN/ActivityManager(59): Permission Denial: starting Intent { cmp=com.fsck.k9/.activity.MessageList (has extras) } from ProcessRecord{43f6d7c8 675:com.i10n.notifier/10052} (pid=675, uid=10052) requires null
WARN/System.err(675): java.lang.SecurityException: Permission Denial: starting Intent { cmp=com.fsck.k9/.activity.MessageList (has extras) } from ProcessRecord{43f6d7c8 675:com.i10n.notifier/10052} (pid=675, uid=10052) requires null
WARN/System.err(675): at android.os.Parcel.readException(Parcel.java:1247)
WARN/System.err(675): at android.os.Parcel.readException(Parcel.java:1235)
WARN/System.err(675): at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:1298)
WARN/System.err(675): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1373)
WARN/System.err(675): at android.app.Activity.startActivityForResult(Activity.java:2817)
WARN/System.err(675): at android.app.Activity.startActivity(Activity.java:2923)
WARN/System.err(675): at com.i10n.notifier.GWVectraNotifier$2$1.run(GWVectraNotifier.java:63)
WARN/System.err(675): at android.app.Activity.runOnUiThread(Activity.java:3707)
WARN/System.err(675): at com.i10n.notifier.GWVectraNotifier$2.onClick(GWVectraNotifier.java:53)
WARN/System.err(675): at android.view.View.performClick(View.java:2408)
WARN/System.err(675): at android.view.View$PerformClick.run(View.java:8816)
WARN/System.err(675): at android.os.Handler.handleCallback(Handler.java:587)
WARN/System.err(675): at android.os.Handler.dispatchMessage(Handler.java:92)
WARN/System.err(675): at android.os.Looper.loop(Looper.java:123)
WARN/System.err(675): at android.app.ActivityThread.main(ActivityThread.java:4627)
WARN/System.err(675): at java.lang.reflect.Method.invokeNative(Native Method)
WARN/System.err(675): at java.lang.reflect.Method.invoke(Method.java:521)
WARN/System.err(675): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
WARN/System.err(675): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
WARN/System.err(675): at dalvik.system.NativeStart.main(Native Method)
실제로 k9Mail의 MessageList에 액세스하기 위해 내 알리미 애플리케이션의 매니페스트 파일에 포함 할 권한을 이해할 수 없습니다. k9mail 애플리케이션의 매니페스트 파일에 포함 된 권한 아래에 붙여 넣습니다.
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.READ_SYNC_SETTINGS"/>
<uses-permission android:name="android.permission.READ_OWNER_DATA"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="org.thialfihar.android.apg.permission.READ_KEY_DETAILS"/>
<permission android:name="com.fsck.k9.permission.READ_ATTACHMENT"
android:permissionGroup="android.permission-group.MESSAGES"
android:protectionLevel="dangerous"
android:label="@string/read_attachment_label"
android:description="@string/read_attachment_desc"/>
<uses-permission android:name="com.fsck.k9.permission.READ_ATTACHMENT"/>
<permission android:name="com.fsck.k9.permission.REMOTE_CONTROL"
android:permissionGroup="android.permission-group.MESSAGES"
android:protectionLevel="dangerous"
android:label="@string/remote_control_label"
android:description="@string/remote_control_desc"/>
<uses-permission android:name="com.fsck.k9.permission.REMOTE_CONTROL"/>
<permission android:name="com.fsck.k9.permission.READ_MESSAGES"
android:permissionGroup="android.permission-group.MESSAGES"
android:protectionLevel="normal"
android:label="@string/read_messages_label"
android:description="@string/read_messages_desc"/>
<uses-permission android:name="com.fsck.k9.permission.READ_MESSAGES"/>
<permission android:name="com.fsck.k9.permission.DELETE_MESSAGES"
android:permissionGroup="android.permission-group.MESSAGES"
android:protectionLevel="normal"
android:label="@string/delete_messages_label"
android:description="@string/read_messages_desc"/>
<uses-permission android:name="com.fsck.k9.permission.DELETE_MESSAGES"/>
어떤 사람이 내 앱에 포함 할 권한을 알려줄 수 있습니까? 위의 권한에서 일부는 k9mail 전용입니다. k9 용으로 작성된 권한 클래스이기 때문입니다. 따라서 위의 주어진 권한에 Android의 기본 제공 권한 만 포함 할 수 있습니다. 나도 그렇게 시도했지만 내 문제가 해결되지 않았습니다.
답변
android:exported="true"
시작하려는 활동에 매니페스트 파일 을 추가 해야합니다.
로부터 수출 문서 : 안드로이드 :
android : exported
다른 응용 프로그램의 구성 요소에서 활동을 시작할 수 있는지 여부 — 가능하면 “true”, 그렇지 않으면 “false”입니다. “false”인 경우 활동은 동일한 애플리케이션의 구성 요소 또는 동일한 사용자 ID를 가진 애플리케이션에 의해서만 실행될 수 있습니다.기본값은 활동에 인 텐트 필터가 포함되어 있는지 여부에 따라 다릅니다. 필터가 없다는 것은 정확한 클래스 이름을 지정해야만 활동을 호출 할 수 있음을 의미합니다. 이것은 활동이 애플리케이션 내부 용으로 만 사용된다는 것을 의미합니다 (다른 사람들이 클래스 이름을 알지 못하기 때문에). 따라서이 경우 기본값은 “false”입니다. 반면에 필터가 하나 이상 있다는 것은 활동이 외부 사용을위한 것임을 의미하므로 기본값은 “true”입니다.
이 속성은 다른 애플리케이션에 대한 활동의 노출을 제한하는 유일한 방법은 아닙니다. 권한을 사용하여 활동을 호출 할 수있는 외부 엔터티를 제한 할 수도 있습니다 (권한 속성 참조).
답변
java.lang.SecurityException
같은 활동을 가리키는 두 개의 항목을 입력 할 수 있기 때문에 당신이보고있는 것이다. 두 번째 것을 제거하면 잘 될 것입니다.
더 많은 설명
다음과 같은 다른 속성을 사용하여 매니페스트에서 활동을 2 번 선언 할 수 있습니다.
<activity android:name=".myclass"> </activity>
과
<activity android:name=".myclass" android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
매니페스트에서 원치 않는 항목을 제거해야합니다.
답변
매니페스트 파일에서 이것을 작성하십시오. </application >
<activity android:name="com.fsck.k9.activity.MessageList">
<intent-filter>
<action android:name="android.intent.action.MAIN">
</action>
</intent-filter>
</activity>
문제가 해결되는지 알려주세요 🙂
답변
이 정확한 활동에이 문제가있었습니다.
외부 활동에서 com.fsck.k9.activity.MessageList를 시작할 수 없습니다.
나는 그것을 다음과 같이 해결했다.
Intent LaunchK9 = getPackageManager().getLaunchIntentForPackage("com.fsck.k9");
this.startActivity(LaunchK9);
http://developer.android.com/reference/android/content/pm/PackageManager.html 사용
답변
동일한 문제가 발생했으며 설명한대로 인 텐트 필터를 추가하지 않으려 고했습니다. 몇 가지 파헤친 후, 호출하려는 활동에 추가해야하는 xml 속성 android : exported 를 발견했습니다 .
활동에 인 텐트 필터가 추가되지 않은 경우 기본적으로 false로 설정되지만 인 텐트 필터가있는 경우 true로 설정됩니다.
다음은 http://developer.android.com/guide/topics/manifest/activity-element.html#exported 문서입니다.
tl; dr : android:exported="true"
AndroidManifest.xml 파일의 활동에 추가하고 인 텐트 필터를 추가하지 마십시오. 🙂