【问题标题】:Android preferences issueAndroid偏好问题
【发布时间】:2012-04-10 11:04:50
【问题描述】:

我正在尝试为我的 android 应用程序制作首选项屏幕,但我完全失败了。我正在关注this guide。当我尝试安装该应用程序时,我收到此错误消息,并且它不会在我的手机上安装该应用程序:

[2012-04-10 12:54:45 - AndroidCurrencyConverter] ------------------------------
[2012-04-10 12:54:45 - AndroidCurrencyConverter] Android Launch!
[2012-04-10 12:54:45 - AndroidCurrencyConverter] adb is running normally.
[2012-04-10 12:54:45 - AndroidCurrencyConverter] Performing ValutaConverter.namespace.AndroidValutaConverterActivity activity launch
[2012-04-10 12:54:45 - AndroidCurrencyConverter] Automatic Target Mode: using device '3134BC2BBCA800EC'
[2012-04-10 12:54:45 - AndroidCurrencyConverter] Uploading AndroidCurrencyConverter.apk onto device '3134BC2BBCA800EC'
[2012-04-10 12:54:46 - AndroidCurrencyConverter] Installing AndroidCurrencyConverter.apk...
[2012-04-10 12:54:49 - AndroidCurrencyConverter] Success!
[2012-04-10 12:54:49 - AndroidCurrencyConverter] Starting activity ValutaConverter.namespace.AndroidValutaConverterActivity on device 3134BC2BBCA800EC
[2012-04-10 12:54:52 - AndroidCurrencyConverter] ActivityManager: Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=ValutaConverter.namespace/.AndroidValutaConverterActivity }
[2012-04-10 12:54:52 - AndroidCurrencyConverter] ActivityManager: java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=ValutaConverter.namespace/.AndroidValutaConverterActivity } from null (pid=11486, uid=2000) requires android.permission.INTERNET
[2012-04-10 12:54:52 - AndroidCurrencyConverter] ActivityManager: at android.os.Parcel.readException(Parcel.java:1327)
[2012-04-10 12:54:52 - AndroidCurrencyConverter] ActivityManager: at android.os.Parcel.readException(Parcel.java:1281)
[2012-04-10 12:54:52 - AndroidCurrencyConverter] ActivityManager: at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:1631)
[2012-04-10 12:54:52 - AndroidCurrencyConverter] ActivityManager: at com.android.commands.am.Am.runStart(Am.java:433)
[2012-04-10 12:54:52 - AndroidCurrencyConverter] ActivityManager: at com.android.commands.am.Am.run(Am.java:107)
[2012-04-10 12:54:52 - AndroidCurrencyConverter] ActivityManager: at com.android.commands.am.Am.main(Am.java:80)
[2012-04-10 12:54:52 - AndroidCurrencyConverter] ActivityManager: at com.android.internal.os.RuntimeInit.finishInit(Native Method)
[2012-04-10 12:54:52 - AndroidCurrencyConverter] ActivityManager: at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:238)
[2012-04-10 12:54:52 - AndroidCurrencyConverter] ActivityManager: at dalvik.system.NativeStart.main(Native Method)

我从这段代码中了解到,当它尝试启动 Intent 时,它失败了,因为它需要 android.permission.INTERNET。但这已经在我的清单文件中定义了。

我的应用程序在某个时候可以运行,但我在我的活动中添加了一些东西,添加了另一个活动和一些 XML 文件。在此之后,它不会在手机上安装该应用程序。我补充的是:

在活动类中:

addPreferencesFromResource(R.xml.preferences);

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    menu.add(Menu.NONE, 0, 0, "Show current settings");
    return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case 0:
        startActivity(new Intent(this, ShowSettingsActivity.class));
        return true;
    }
    return false;
}

如果您需要有关代码或类似内容的任何其他信息,我很乐意发布其中的一些信息。

帮助!

【问题讨论】:

标签: java android preferences securityexception


【解决方案1】:

应该是,

<uses-permission 
        android:name="android.permission.INTERNET" />
 <application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >
    <activity
        android:configChanges="orientation|keyboardHidden|screenSize"
        android:label="@string/app_name"
        android:name=".AndroidValutaConverterActivity"
        android:theme="@android:style/Theme.DeviceDefault" >
        <intent-filter >
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name=".ShowSettingsActivity"/>
</application>

从清单文件中的活动标签中删除它。

【讨论】:

  • 好的。我用它作为我的清单文件,但现在当我尝试安装它时应用程序停止工作。我得到一个致命异常:主要。
  • 你的 AndroidValutaConverterActivity 扩展 ListActivity 了吗?
  • 不,它扩展了 PreferenceActivity。
  • 在您的应用程序中扩展 ListActivity 的任何其他活动?
  • 使用 AndroidValutaConverterActivity 的新错误日志和代码发布新问题,它与 listview id ('android.R.id.list') 有关。
【解决方案2】:

确实,但您没有允许清单中的 INTERNET 权限(相反,您明确地说该活动需要 INTERNET 权限)。

您应该在清单的根目录中有一个&lt;permission&gt; element,如文档中所述。

【讨论】:

    【解决方案3】:

    有两件事要检查。

    1. 您的活动正在扩展 PreferenceActivity,并且

    2. 你的布局有一个默认的 ListView,id 为 android:list

      <ListView 
          android:id="@+id/android:list"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"/>
      

    如果您需要处理偏好更改,您可能还需要考虑在您的活动中实现 OnSharedPreferenceChangeListener。

    【讨论】:

      猜你喜欢
      • 2011-04-21
      • 1970-01-01
      • 2015-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      相关资源
      最近更新 更多