2017-02-17 4 views
0

Ich versuche App-Verknüpfungen in meine App zu implementieren, aber ich kann sie nicht arbeiten lassen. Mein shortcut.xml:ActivityNotFoundException: Die Verknüpfung konnte nicht gestartet werden

<Shortcuts xmlns:android="http://schemas.android.com/apk/res/android"> 
<shortcut 
    android:shortcutId="shortcut" 
    android:enabled="true" 
    android:icon="@drawable/ic_shortcut" 
    android:shortcutShortLabel="@string/shortcut_label"> 
    <intent 
     android:action="android.intent.action.VIEW" 
     android:targetPackage="com.example" 
     android:targetClass="com.example.package.Activity"/> 
</shortcut> 

manifest.xml:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
package="com.example"> 

<application 
    android:name=".Application" 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:resizeableActivity="false" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 

    <activity 
     android:name=".package.Activity" 
     android:label="@string/app_name" 
     android:launchMode="singleTask" 
     android:theme="@style/AppTheme.NoActionBar"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
      <action android:name="android.intent.action.SEARCH" /> 
     </intent-filter> 

     <meta-data 
      android:name="android.app.searchable" 
      android:resource="@xml/voice_search_params" /> 

     <meta-data android:name="android.app.shortcuts" 
      android:resource="@xml/shortcuts" /> 
    </activity> 

Also, ich tue Verknüpfung gleiche wie in google Beispiel. Ich kann eine Verknüpfung sehen und anklicken, aber nichts passiert. Ich habe verschiedene Aktivitäten versucht, Aktivität Lage zu ändern, Aktivität Aktion, params, wie „exportiert = true“, aber es ändert sich nichts - in Protokollen kann ich nur

ActivityNotFoundException siehe: Shortcut nicht

gestartet werden konnte

Der einzige Unterschied zwischen meiner Verknüpfung Protokoll und google Kamera Verknüpfung Protokoll ist Pfad Aktivität:

I/Activity: START u0 {act = android.intent.action.VIEW flg = 0x1000c000 cmp = com.example /.Package.Activity}

vs

I/Activity: START u0 {act = android.media.action.STILL_IMAGE_CAMERA flg = 0x1000c000 cmp = com.google.android.GoogleCamera/com.android.camera.activity.CameraImageActivity }

Google Cam hat vollständigen Pfad zur Aktivität, aber Paketpfad unterscheidet.

PS: versuchte heute Google Beispiel, statische App-Verknüpfungen funktioniert nicht in Probe zu. Dynamische App-Verknüpfungen funktionieren gut.

Antwort

0

Ändern Sie den Paketnamen auf Ihrer Aktivität auf:

android:name=".Activity" 

ändern Ihre Verknüpfung Zielklasse zu:

android:targetClass="com.example.Activity" 
+0

Dies wurde bereits versucht. Hilft nicht. – Anton

+0

Der Grund, warum Sie die ActivityNotFoundException abrufen würden, ist, wenn sich die Aktivität nicht in dem Paket befindet, auf das sie im Manifest verweist. Wie lautet der Paketname, der oben in der Java-Aktivitätsdatei angezeigt wird? –

+0

com.example.package, genau wie im Pfad. Ich habe versucht, vollen Aktivitätsweg zu schreiben, nichts ändert sich. – Anton

0

traf ich auch dieses Problem. Dann habe ich festgestellt, dass Android: targetClass nicht der richtige Pfad ist. android: targetClass = "com.example.camille.testappshortcuts.Main" Haupt ist App-Zugriff. Vielleicht sollten Sie Aktivität zu einem anderen Namen ändern und dann hinzufügen.

1

android:targetPackage müssen Ihre Anwendungs-ID enthalten. Also, wenn Sie Ihre App-ID in build.gradle als applicationId "com.my.app.id" definiert haben, verfügen Sie android:targetPackage="com.my.app.id"

1

Neben Matin Antwort verwenden, wenn Sie mehrere Build-Typen haben, die Ihre Anwendung-ID zu ändern, wird es nicht funktionieren. In meinem Fall hatte ich .debug und .qa Suffix für die Anwendungs-ID. Sie können nicht auf eine String-Referenz verweisen oder Variablen innerhalb des Elements intent verwenden.

fand ich zwei Lösungen:

1) Sie werden verschiedene shortcuts.xml Datei für verschiedene Build-Typen erstellen und Ihre targetPackage aktualisieren.

Zum Beispiel

<intent 
     android:action="com.example.ACTION" 
     android:targetClass="com.example.MainActivity" 
     android:targetPackage="com.example.debug"/> 

2) Es ist ein Plugin, das Sie applicationId Variable in der XML-Datei verwenden.

https://github.com/timfreiheit/ResourcePlaceholdersPlugin

Verwandte Themen