2016-08-22 3 views
0

Meine App kann instanziiert:kann nicht auf zwei Arten gestartet Aktivität ComponentInfo Exception

  • „Normalerweise“
  • Als Intent über den Launcher, wenn der Benutzer einen Kontakt aus seinem Adressbuch
wählt

Die erste Methode funktioniert gut. Die Hauptaktivität wird geöffnet und der Benutzer kann die App verwenden. Das zweite Verfahren erzeugt jedoch den folgenden Fehler/Absturz:

Unable Aktivität ComponentInfo {de.mystuff.myapp/de.mystuff.myapp.MainActivity} instanziiert: java.lang.ClassNotFoundException: Haben Sie nicht gefunden Klasse "de.mystuff.myapp.MainActivity" auf Pfad: DexPathList [[zip-Datei "/data/app/de.mystuff.myapp-1/base.apk"],nativeLibraryDirectories=[/data/app/de. mystuff.myapp-1/lib/Arm, /data/app/de.mystuff.myapp-1/base.apk!/lib/armeabi-v7a, /Verkäufer/lib/System/lib]]

In meinem Manifest Ich habe die Haupttätigkeit erklärt sich wie folgt:

<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> 

Und Code meine Tätigkeit der wie folgt aussieht:

[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 
    } 
} 

Antwort

3

Sie sollten vermeiden deklarativen Stil zu mischen und manuell die AndroidManifest.xml zu schreiben.

[Activity (Label = "MyApp", MainLauncher = true, Icon = "@mipmap/ic_launcher")] ist ein Stück Code in der tatsächlichen Erzeugung verwendet (generiert) AndroidManifest.xml, die wie folgt aussieht:

<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> 

und Ihr Code woanders sein wird. Sie finden das generierte AndroidManifest.xml im Ausgabeordner .\obj\Debug\android.

Lösung:

Sie können Ihre Sachen über Attribute wie hinzufügen:

[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 
{ 
    // ... 
} 

und die manuelle Bearbeitung von Ihrer Manifest-Datei entfernen. Die Ausgabe wird wie folgt aussehen:

<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> 
0

Für Xamarin.Android konnte ich dieses Problem lösen, indem Aktivität Erklärung zu entfernen und mein Paket als ProjectNamespace.ProjectNamespace in der AndroidManifest.xml. Einstellung Ich weiß nicht, warum es funktioniert, aber es tat.

Hier ist, wie meine Manifest Datei aussieht:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="CSharpApp.CSharpApp" android:installLocation="auto"> 
    <uses-permission android:name="android.permission.CALL_PHONE" /> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 

    <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:theme="@style/AppTheme.NoActionBar" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true"> 
    <meta-data android:name="com.google.android.geo.API_KEY" android:value="@string/maps_api_key" /> 
    </application> 

    <uses-sdk android:minSdkVersion="15" android:targetSdkVersion="25" /> 
</manifest> 
Verwandte Themen