web-dev-qa-db-ja.com

Android-Java.lang.SecurityException:許可の拒否:Intentの開始

プロジェクトのビルドパスにライブラリ(jar)があります。プロジェクトは、次の目的を使用して、jar内のMainActivityにアクセスします。

final Intent it = new Intent();
it.setClassName("com.example.lib", "com.example.lib.MainActivity");
startActivity(it);

以前は機能していましたが、突然「ActivityNotFoundException:No Activity found to Intent」を取得し始めましたが、解決できました。しかし、今では「Java.lang.SecurityException:Permission Denial:starting Intent」で立ち往生しています。

私はstackoverflowで行われたすべての提案を試しました(マニフェストファイルの重複を確認してください.Android:exported = "true"をlibマニフェストに追加してください; Eclipse> Project> Clean; 'intent-filter'タグを追加/変更するなど)。私はプロジェクトのマニフェストを書き直そうとしましたが、どこにも行かなかったのです。

Logcatの出力は次のとおりです。

11-07 06:20:52.176: E/AndroidRuntime(4626): FATAL EXCEPTION: main
11-07 06:20:52.176: E/AndroidRuntime(4626): Java.lang.SecurityException: Permission     Denial: starting Intent { cmp=com.example.lib/.MainActivity } from ProcessRecord{40dd3778     4626:com.example.project/u0a10046} (pid=4626, uid=10046) not exported from uid 10047
11-07 06:20:52.176: E/AndroidRuntime(4626):     at Android.os.Parcel.readException(Parcel.Java:1425)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at Android.os.Parcel.readException(Parcel.Java:1379)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at Android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.Java:1885)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at Android.app.Instrumentation.execStartActivity(Instrumentation.Java:1412)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at Android.app.Activity.startActivityForResult(Activity.Java:3370)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at Android.app.Activity.startActivityForResult(Activity.Java:3331)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at Android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.Java:824)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at Android.app.Activity.startActivity(Activity.Java:3566)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at Android.app.Activity.startActivity(Activity.Java:3534)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at com.example.project.MainActivity.onOptionsItemSelected(MainActivity.Java:93)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at Android.app.Activity.onMenuItemSelected(Activity.Java:2548)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at Android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.Java:366)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at com.Android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.Java:980)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at com.Android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.Java:735)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at com.Android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.Java:149)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at com.Android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.Java:874)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at com.Android.internal.view.menu.ActionMenuView.invokeItem(ActionMenuView.Java:547)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at com.Android.internal.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.Java:115)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at Android.view.View.performClick(View.Java:4204)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at Android.view.View$PerformClick.run(View.Java:17355)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at Android.os.Handler.handleCallback(Handler.Java:725)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at Android.os.Handler.dispatchMessage(Handler.Java:92)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at Android.os.Looper.loop(Looper.Java:137)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at Android.app.ActivityThread.main(ActivityThread.Java:5041)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at Java.lang.reflect.Method.invokeNative(Native Method)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at Java.lang.reflect.Method.invoke(Method.Java:511)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:793) 
11-07 06:20:52.176: E/AndroidRuntime(4626):     at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:560)
11-07 06:20:52.176: E/AndroidRuntime(4626):     at dalvik.system.NativeStart.main(Native Method)

プロジェクトのマニフェストXML:

<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="com.example.project"
Android:versionCode="4"
Android:versionName="4.0" >

<!-- Permissions -->
<uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE" />
<uses-permission Android:name="Android.permission.INTERNET" />
<supports-screens Android:anyDensity="true" />

<!-- SDK Settings -->
<uses-sdk
    Android:minSdkVersion="11"
    Android:targetSdkVersion="18" />

<!-- APP Start -->
<application
    Android:allowBackup="true"
    Android:icon="@drawable/ic_launcher"
    Android:label="@string/app_name"
    Android:theme="@style/AppTheme" >

<!-- App Activity -->
    <activity
        Android:name="com.example.project.MainActivity"
        Android:label="@string/app_name"
        Android:screenOrientation="portrait" >
        <intent-filter>
            <action Android:name="Android.intent.action.MAIN" />
            <category Android:name="Android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

<!-- Library Activity -->
    <activity Android:name="com.example.lib.MainActivity" Android:label="LibMain">
         <intent-filter>
        <action Android:name="Android.intent.action.MAIN"></action>
     </intent-filter>
    </activity>

</application>
<!-- END - APP -->

</manifest>

私は何を見落としていますか?助言がありますか?

編集

Manifest.xmlを他のすべてのアクティビティで更新し、なんとかして問題を解決しました。インテントアクティビティがエラーなしで起動します。 しかし、これはAVDのみです。実際のデバイスでは、同じエラーが引き続き発生しています。デバイスからアプリを完全にアンインストールして再インストールしましたが、同じエラーが発生しました。

52
Ramanathan

例外は明らかです。このActivityを宣言するAndroid:exported="true"ファイルにAndroidManifest.xmlを設定する必要があります。

編集

<activity
    Android:name="com.example.lib.MainActivity"
    Android:label="LibMain" 
    Android:exported="true">
    <intent-filter>
        <action Android:name="Android.intent.action.MAIN" >
        </action>
    </intent-filter>
</activity>
123
Sunny

これはAndroidスタジオ専用です

だから私は最近この問題に遭遇しました。問題はビルド/実行構成にありました。どうやらAndroidスタジオは起動アクティビティとして私のプロジェクトのアクティビティを選択したため、マニフェストファイルでの選択は無視されました。

実行ボタンの左側にあるモジュール名をクリックして、「構成の編集...」をクリックします。「デフォルトのアクティビティの起動」が選択されていることを確認します。

このエラーが発生したときの面白いことは、デバイスからアプリを起動でき、優先アクティビティで起動することです。しかし、IDEからの起動は不可能に思えました。

40
Olayinka

アプリケーションを起動するための適切な構成を選択します。

私の場合、私は以下の画像のような間違いを見つけました:

enter image description here

私はちょうど次のように変更しました:

enter image description here

それが誰かに役立つように、ありがとう:)

'com.example.lib.MainActivity'アクティビティタグにAndroid:exported = "true"を追加します。

Android:exported documentationから、

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

Logcatの出力から、明らかにuidの不一致が問題の原因です。そのため、Android:exported = "true"を追加するとうまくいきます。

4
ss19

ADTの構成ファイルに関するOlayinkaの回答と同様に、IntelliJのIdeaU v14でも同じ問題が発生しました。

開始アクティビティをMyActivityからMyListActivityに変更するチュートリアルを進めています(これはMyActivityのリストです)。許可拒否を取得し始めました。

多くの試行錯誤の後、苦労と痛み:.idea\workspace.xmlで:

...
<configuration default="false" name="MyApp" type="AndroidRunConfigurationType" factoryName="Android Application">
    <module name="MyApp" />
    <option name="ACTIVITY_CLASS" value="com.domain.MyApp.MyActivity" />
    ...
</configuration>
...

MyActivityMyListActivityに変更し、プロジェクトをリロードして、再びローリングスタートを開始しました。

どのIDEを使用しているかわかりませんが、IDEが特定の開始アクティビティをオーバーライドまたは強制している可能性がありますか?

2
WernerCD

Android studioでコード化されたアプリをAndroid電話でテストしようとしている場合、通常は電話の問題です。すべてのUSBデバッグオプションのチェックを外し、開発者オプションをオフに切り替えます。次に、電話機を再起動し、開発者とUSBデバッグをオンにします。準備ができました!

1
bhavya sanghavi

私の場合、このエラーは、プロジェクトの名前を変更した後、プリファレンスxmlファイルでインテントを指定するために使用された不正なパスが原因でした。たとえば、私がいた場所:

<PreferenceScreen xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <Preference
        Android:key="pref_edit_recipe_key"
        Android:title="Add/Edit Recipe">
        <intent
            Android:action="Android.intent.action.VIEW"
            Android:targetPackage="com.ssimon.olddirectory"
            Android:targetClass="com.ssimon.olddirectory.RecipeEditActivity"/>
    </Preference>
</PreferenceScreen> 

代わりに次のものが必要でした。

<PreferenceScreen xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <Preference
        Android:key="pref_edit_recipe_key"
        Android:title="Add/Edit Recipe">
        <intent
            Android:action="Android.intent.action.VIEW"
            Android:targetPackage="com.ssimon.newdirectory"
            Android:targetClass="com.ssimon.newdirectory.RecipeEditActivity"/>
</Preference>

パス名を修正すると、問題が修正されました。

0
stevehs17

特定のactivityを次のようにすると

Android:exported="true"

起動するactivityになります。実行buttonのすぐ左にあるモジュール名をクリックし、「構成の編集...」をクリックします。ここで"Launch default Activity"が選択されていることを確認してください。

0