114

通知を表示するために他のアプリケーションから呼び出されるGWVectraNotifierアクティビティを含むアプリケーションを作成しました。

通知ダイアログには、「表示」ボタンと「閉じる」ボタンがあります。

「表示」ボタンをクリックすると、対応するアクティビティが開始されます。

上記のアプリケーションの機能を確認するには、

checkmailイベントトリガーでK9MailアプリケーションからGWVectraNotifierアクティビティを開始しました。

GWVectraNotifierアクティビティを正常に開始できますが、[表示]ボタンをクリックすると、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にアクセスするためにNotifierアプリケーションのマニフェストファイルに含める権限を理解できません。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"/>           

誰かが私のアプリに含める許可を教えてもらえますか?上記のパーミッションでは、k9用に作成されたパーミッションクラスであるため、一部はk9mail専用です。したがって、上記の権限にAndroidの組み込み権限のみを含めることができます。私もそうしてみましたが、問題は解決しませんでした:(

4

9 に答える 9

157

android:exported="true"開始しようとしているアクティビティにマニフェストファイルを追加する必要があります。

android:exportedドキュメントから:

android:exported
アクティビティを他のアプリケーションのコンポーネントで起動できるかどうか。可能な場合は「true」、そうでない場合は「false」。「false」の場合、アクティビティは、同じアプリケーションのコンポーネントまたは同じユーザーIDを持つアプリケーションによってのみ起動できます。

デフォルト値は、アクティビティにインテントフィルタが含まれているかどうかによって異なります。フィルタがないということは、正確なクラス名を指定することによってのみアクティビティを呼び出すことができることを意味します。これは、アクティビティがアプリケーション内部での使用のみを目的としていることを意味します(他の人はクラス名を知らないため)。したがって、この場合、デフォルト値は「false」です。一方、少なくとも1つのフィルターが存在するということは、アクティビティが外部での使用を目的としていることを意味するため、デフォルト値は「true」です。

この属性は、アクティビティが他のアプリケーションにさらされるのを制限する唯一の方法ではありません。権限を使用して、アクティビティを呼び出すことができる外部エンティティを制限することもできます(権限属性を参照)。

于 2012-01-09T06:57:47.073 に答える
102

表示されているのjava.lang.SecurityExceptionは、同じアクティビティを指す2つのエントリを入力できるためです。2つ目を削除すると、準備が整います。

詳細説明

マニフェストで、次のようなさまざまなプロパティを使用してアクティビティを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>

マニフェストから不要なものを削除する必要があります

于 2011-05-16T09:24:03.380 に答える
16

あなたのマニフェストファイルでこれを前に書いてください</application >

<activity android:name="com.fsck.k9.activity.MessageList">
   <intent-filter>
      <action android:name="android.intent.action.MAIN">
      </action>
   </intent-filter>
</activity>

それがあなたの問題を解決するかどうか教えてください:)

于 2010-11-12T08:11:00.977 に答える
8

私はこの正確な活動でこの問題を抱えていました。

外部アクティビティから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を使用する

于 2012-05-08T01:41:51.423 に答える
6

私は同じ問題に遭遇していて、あなたが説明したようにインテント フィルターを追加したくありませんでした。掘り下げた後、呼び出したいアクティビティに追加する必要がある xml 属性android:exportedを見つけました。

アクティビティにインテント フィルタが追加されていない場合は、デフォルトで false に設定されますが、インテント フィルタがある場合は true に設定されます。

ここにドキュメントがあります http://developer.android.com/guide/topics/manifest/activity-element.html#exported

tl;dr: android:exported="true"AndroidManifest.xml ファイルのアクティビティに追加し、intent-filter の追加を避けてください :)

于 2011-11-04T21:37:02.947 に答える
1

コンポーネントの「エクスポート済み」フラグが true に設定されていることを確認してください。また、パーミッションを定義するコンポーネントは、それを使用するコンポーネントの前にインストールする必要があります。

于 2014-07-24T20:47:51.987 に答える
1

target sdkバージョンを19以降のkitkatバージョンに変更することで、この例外を解決しましたAndroidManifest.xml.

<uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="19" />
于 2014-10-21T06:34:23.100 に答える