我想从首选项屏幕启动一个 Activity 。这在过去已经奏效了,我没有更改任何代码,但更新了 Android SDK(更新了软件包并安装了新的),从那以后它就不再起作用了。我得到一个异常,找不到 Activity 。
我做错了什么,我错过了什么?
我的 Activity :
namespace com.mycompany.myproject.config
{
[Activity(
Label = "@string/config_bt_select_device",
ConfigurationChanges = ConfigChanges.KeyboardHidden | ConfigChanges.Orientation
)]
public class actDeviceList : Activity
我的首选项屏幕 XML:
<PreferenceScreen
android:key="DeviceAddress"
android:title="@string/config_optDeviceAddress">
<intent android:action="android.intent.action.VIEW"
android:targetPackage="com.mycompany.myproject"
android:targetClass="com.mycompany.myproject.config.actDeviceList"
android:data="RadioReceiverDevice"
/>
</PreferenceScreen>
我的 manifest.xml(在 Xamarin 中):
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="auto" package="com.mycompany.myproject" android:versionName="1.3.10" android:versionCode="48">
<uses-sdk android:targetSdkVersion="21" android:minSdkVersion="12" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.FLASHLIGHT" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<application android:icon="@drawable/general_action_about" android:label="My Project Name" android:theme="@style/ProjectTheme" />
</manifest>
单击首选项时出现异常:
06-15 16:31:47.780 I/InputDispatcher( 898): Delivering touch to (14502): action: 0x1, toolType: 1
06-15 16:31:47.780 I/Timeline(14502): Timeline: Activity_launch_request id:com.mycompany.myproject time:1665066
06-15 16:31:47.780 E/PersonaManagerService( 898): inState(): stateMachine is null !!
06-15 16:31:47.780 I/ActivityManager( 898): START u0 {act=android.intent.action.VIEW dat=Device cmp=com.mycompany.myproject/.config.actDeviceList} from uid 11098 on display 0
06-15 16:31:47.780 E/InputEventReceiver(14502): Exception dispatching input event.
06-15 16:31:47.790 E/MessageQueue-JNI(14502): Exception in MessageQueue callback: handleReceiveCallback
06-15 16:31:47.790 E/MessageQueue-JNI(14502): android.content.ActivityNotFoundException: Unable to find explicit activity class {com.mycompany.myproject/com.mycompany.myproject.config.actDeviceList}; have you declared this activity in your AndroidManifest.xml?
06-15 16:31:47.790 E/MessageQueue-JNI(14502): at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1777)
06-15 16:31:47.790 E/MessageQueue-JNI(14502): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1499)
06-15 16:31:47.790 E/MessageQueue-JNI(14502): at android.app.Activity.startActivityForResult(Activity.java:3913)
06-15 16:31:47.790 E/MessageQueue-JNI(14502): at android.app.Activity.startActivityForResult(Activity.java:3860)
06-15 16:31:47.790 E/MessageQueue-JNI(14502): at android.app.Activity.startActivity(Activity.java:4184)
编辑:
Xamarin 在构建过程中创建的 AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="auto" package="com.mycompany.myproject" android:versionName="1.3.10" android:versionCode="48">
[... permissions ...]
<application android:icon="@drawable/general_action_about" android:label="My Project Name" android:theme="@style/ProjectTheme" android:name="md5ab60cc6a69ae4b801c5b8b198bf1c300.ProjectApp" android:debuggable="true">
[...lots of activities...]
<activity android:configChanges="keyboardHidden|orientation" android:label="@string/config_bt_select_device" android:name="md50664b305cd453fdd36618c371adf64ff.actDeviceList" />
</application>
</manifest>
最佳答案
这里的问题是您需要在Activity
上使用[Register]
属性。这是自 Xamarin.Android 5.1 以来所必需的,否则它会在您的 Activity 前加上 MD5 总和,以便包名称是唯一的。
所以做这样的事情:
[Register("com.mycompany.myproject.config.actDeviceList")]
[Activity(Label = "Device List" ...)]
public class actDeviceList : Activity
{
...
}
否则,您也可以使用 Name
属性在 Activity
属性中明确指定一个 Activity
名称。
如果您阅读了发行说明,您就会发现这一点。
关于android - 从 PreferenceScreen 启动 Activity 时出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30848160/