SecurityException:"无法启动活动Intent"使用简单的startActivity时

时间:2014-10-09 17:06:54

标签: android android-activity start-activity android-securityexception

startActivity(new Intent(this, SettingsActivity.class));

在4.0上为我的一个用户找到了这个错误的实例:

java.lang.SecurityException: Not allowed to start activity Intent { cmp=co.bandicoot.ztrader/.activity.SettingsActivity }
    at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1675)
    at android.app.Instrumentation.execStartActivity(Instrumentation.java:1442)
    at android.app.Activity.startActivityForResult(Activity.java:3474)
    at android.app.Activity.startActivityForResult(Activity.java:3435)
    at android.support.v4.app.FragmentActivity.startActivityForResult(SourceFile:839)
    at android.app.Activity.startActivity(Activity.java:3677)
    at android.app.Activity.startActivity(Activity.java:3645)
    at co.bandicoot.ztrader.activity.MainActivity.onOptionsItemSelected(SourceFile:3446)
    .....

这是我对SettingsActivity的清单声明:

<activity
    android:name="co.bandicoot.ztrader.activity.SettingsActivity"
    android:label="@string/action_settings"
    android:parentActivityName="co.bandicoot.ztrader.activity.MainActivity"
    android:screenOrientation="portrait" >
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value="co.bandicoot.ztrader.activity.MainActivity" />
</activity>

有什么想法吗?

编辑:这是我的完整清单。这里有什么不对吗?我正在查看“设计活动”,而且似乎没有任何可能需要其他权限的内容。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="co.bandicoot.ztrader"
    android:versionCode="110"
    android:versionName="3.5.2" >

    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="20" />

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:largeHeap="true"
        android:theme="@style/Theme.Ztraderdarkactionbar" >
        <receiver android:name=".TickerAlarm" >
        </receiver>
        <receiver android:name=".FastAlarm" >
        </receiver>
        <receiver android:name=".DownloadCurrencyPairsTask" >
        </receiver>
        <receiver android:name=".AutoStart" >
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" >
                </action>
            </intent-filter>
        </receiver>

        <service android:name="KillNotificationService" >
        </service>

        <activity
            android:name="co.bandicoot.ztrader.activity.MainActivity"
            android:configChanges="orientation"
            android:label="@string/app_name"
            android:launchMode="singleTask"
            android:screenOrientation="portrait"
            android:uiOptions="splitActionBarWhenNarrow"
            android:windowSoftInputMode="stateHidden" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name="co.bandicoot.ztrader.activity.CreateKeyActivity"
            android:label="@string/create_key"
            android:parentActivityName="co.bandicoot.ztrader.activity.MainActivity"
            android:screenOrientation="portrait" >
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="co.bandicoot.ztrader.activity.MainActivity" />
        </activity>
        <activity
            android:name="co.bandicoot.ztrader.activity.HistoryActivity"
            android:label="@string/history"
            android:parentActivityName="co.bandicoot.ztrader.activity.MainActivity"
            android:screenOrientation="portrait" >
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="co.bandicoot.ztrader.activity.MainActivity" />
        </activity>
        <activity
            android:name="co.bandicoot.ztrader.activity.SettingsActivity"
            android:label="@string/action_settings"
            android:parentActivityName="co.bandicoot.ztrader.activity.MainActivity"
            android:screenOrientation="portrait" >
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="co.bandicoot.ztrader.activity.MainActivity" />
        </activity>
        <activity
            android:name="co.bandicoot.ztrader.activity.ChartActivity"
            android:label="@string/app_name"
            android:parentActivityName="co.bandicoot.ztrader.activity.MainActivity"
            android:screenOrientation="landscape"
            android:theme="@android:style/Theme.Holo.NoActionBar.Fullscreen" >
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="co.bandicoot.ztrader.activity.MainActivity" />
        </activity>
        <activity
            android:name="co.bandicoot.ztrader.activity.ManagePairsActivity"
            android:label="@string/pairs"
            android:screenOrientation="portrait" >
        </activity>
    </application>

</manifest>

2 个答案:

答案 0 :(得分:1)

我认为您的app / SettingsActivity更有可能决定在调用startActivity时进入后台/退出。是的我知道堆栈跟踪显示它正在UI线程上发生,因此活动不应该在发生时完成,但是支持库中似乎存在一些不是错误的错误很好地处理Activity / Fragment生命周期是一些边缘情况。

我认为您的用户遇到了其中一个边缘情况。

答案 1 :(得分:0)

我把它写成评论但是我在这里添加它。来自link

  

android:name

     

实现的Service子类的名称   服务。这应该是一个完全限定的类名(例如,   &#34; com.example.project.RoomService&#34)。但是,作为速记,如果   名称的第一个字符是句点(例如,&#34; .RoomService&#34;),   它附加到指定的包名称中   元件。

因此,请尝试将您的服务更改为:

 <service android:name=".KillNotificationService" >
    </service>