无法实例化活动ComponentInfo异常

时间:2016-08-22 14:18:03

标签: c# android android-intent android-activity xamarin

我的应用可以通过两种方式启动:

  • "通常"通过发射器
  • 作为意图,当用户从其地址簿中选择联系人时

第一种方法效果很好。主要活动打开,用户可以使用该应用程序。但是第二种方法会产生以下错误/崩溃:

  

无法实例化活动   ComponentInfo {de.mystuff.myapp / de.mystuff.myapp.MainActivity}:   java.lang.ClassNotFoundException:没找到类   " de.mystuff.myapp.MainActivity"在路径上:DexPathList [[zip文件   " /data/app/de.mystuff.myapp-1/base.apk"],nativeLibraryDirectories = [/数据/应用/ de.mystuff.myapp-1 / LIB /臂,   /data/app/de.mystuff.myapp-1/base.apk!/lib/armeabi-v7a,   / vendor / lib,/ system / lib]]

在我的清单中,我已宣布主要活动如下:

<activity android:name=".MainActivity" android:theme="@style/AppTheme">
            <intent-filter>
                <action android:name="android.intent.action.CALL" />
                <category android:name="android.intent.category.DEFAULT" />
                <action android:name="android.intent.action.CALL_PRIVILEGED" />
                <data android:scheme="tel" />
            </intent-filter>
        </activity>

我的活动代码如下:

[Activity (Label = "MyApp", MainLauncher = true, Icon = "@mipmap/ic_launcher")]
  public class MainActivity : Activity, SwipeRefreshLayout.IOnRefreshListener
  {
    AppSettings mAppSettings;

    ContactListViewAdapter mListViewAdapter;

    SwipeRefreshLayout mSwiper;

    protected override void OnCreate (Bundle savedInstanceState)
    {
      base.OnCreate (savedInstanceState);
      SetContentView (Resource.Layout.Main);

      // Do some other init stuff
    }
}

2 个答案:

答案 0 :(得分:3)

您应该避免混淆声明式样式并手动编写AndroidManifest.xml

[Activity (Label = "MyApp", MainLauncher = true, Icon = "@mipmap/ic_launcher")]在实际使用的(生成的)AndroidManifest.xml中生成一段代码,如下所示:

<activity android:icon="@drawable/icon" android:label="AndroidApp1" android:name="md5c178831cd46fc53bebc42cf953f78ced.MainActivity">
  <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
  </intent-filter>
</activity>

您的代码将在其他地方。您可以在输出文件夹AndroidManifest.xml中找到生成的.\obj\Debug\android

<强>解决方案:

您可以通过以下属性添加内容:

[Activity (Label = "MyApp", MainLauncher = true, Icon = "@mipmap/ic_launcher")]
[IntentFilter(
    new [] { Intent.ActionCall, "android.intent.action.CALL_PRIVILEGED" },
    Categories = new [] {Intent.CategoryDefault},
    DataScheme = "tel")]
public class MainActivity : Activity, SwipeRefreshLayout.IOnRefreshListener
{
    // ...
}

并从清单文件中删除手动编辑。输出结果如下:

<activity android:icon="@drawable/icon" android:label="AndroidApp1" android:name="md5c178831cd46fc53bebc42cf953f78ced.MainActivity">
  <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
  </intent-filter>
  <intent-filter>
    <action android:name="android.intent.action.CALL" />
    <action android:name="android.intent.action.CALL_PRIVILEGED" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:scheme="tel" />
  </intent-filter>
</activity>

答案 1 :(得分:0)

对于Xamarin.Android,我能够通过删除活动声明并在 <input ng-show="$state.includes('state.to.go')" id="surname" type="text" class="form-control" ng-model="searchSurname" placeholder="Filter surname"> 中将我的包设置为ProjectNamespace.ProjectNamespace来解决此问题我不知道它为什么会起作用但是确实如此。

以下是我的AndroidManifest.xml.文件的外观:

Manifest