3

こんにちは私はアンドロイドアプリケーションのショートカットを開発しています。Android動的ショートカットが適切なアクティビティを初めて開けない

<application 
    android:name=".SampleApplication" 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme"> 
    <activity android:name=".MainActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
      <!--<meta-data android:name="android.app.shortcuts" 
      android:resource="@xml/shortcuts" />--> 
    </activity> 
    <activity android:name=".SampleActivity" /> 
    <activity android:name=".SampleActivity2" /> 
    <activity android:name=".SampleActivity3"></activity> 

このコードの問題は、このようなものです:私のコードは私のマニフェストはこのようになります

private void setShortMenu() { 

    ArrayList<ShortcutInfo> shortcutInfos = new ArrayList<>(); 

    Intent intent = new Intent(this, SampleActivity2.class); 
    intent.setAction(Intent.ACTION_VIEW); 
    intent.putExtra("val",1); 
    intent.addCategory("android.shortcut.conversation"); 
    ShortcutManager shortcutManager = getSystemService(ShortcutManager.class); 

    ShortcutInfo shortcut = new ShortcutInfo.Builder(this, "id2") 
      .setShortLabel("Web site") 
      .setLongLabel("Open the web site") 
      .setIcon(Icon.createWithResource(this, R.mipmap.ic_launcher)) 
      .setIntent(intent) 
      .build(); 
    shortcutInfos.add(shortcut); 

    Intent intent2 = new Intent(this, SampleActivity3.class); 
    intent2.setAction(Intent.ACTION_VIEW); 
    intent.addCategory("android.shortcut.conversation"); 
    intent.putExtra("val",2); 

    ShortcutInfo shortcut2 = new ShortcutInfo.Builder(this, "id1") 
      .setShortLabel("Web site...") 
      .setLongLabel("Open the web site...") 
      .setIcon(Icon.createWithResource(this, R.mipmap.ic_launcher)) 
      .setIntent(intent2) 
      .build(); 
    shortcutInfos.add(shortcut2); 

    shortcutManager.setDynamicShortcuts(shortcutInfos); 
} 

のように見えます。私は背景からアプリケーションを殺した。最初のショートカットをクリックします。それはSampleActivity2を開きます。ホームボタンをクリックして2番目のショートカットをクリックしてアプリケーションを最小限に抑えました。それはSampleActivity3を開きます。この点まではすべて正しいです。しかし、最初のメニューまたは2番目のメニューをクリックすると、最後に最小化されたアクティビティであるSampleActivity3が常に開きます。 私はショートカットの静的な方法で同じことのことを行う場合、それが正常に動作します:

<shortcuts xmlns:android="http://schemas.android.com/apk/res/android"> 
<shortcut 
    android:shortcutId="compose" 
    android:enabled="true" 
    android:icon="@mipmap/ic_launcher" 
    android:shortcutShortLabel="@string/compose_shortcut_short_label1" 
    android:shortcutLongLabel="@string/compose_shortcut_short_label1" 
    android:shortcutDisabledMessage="@string/compose_shortcut_short_label1"> 
    <intent 
     android:action="android.intent.action.VIEW" 
     android:targetPackage="com.example.nilkash.shortcutmenu" 
     android:targetClass="com.example.nilkash.shortcutmenu.SampleActivity2" > 
     <extra android:name="val" android:value="1" /> 
    </intent> 
    <categories android:name="android.shortcut.conversation" /> 
</shortcut> 

<shortcut 
    android:shortcutId="compose1" 
    android:enabled="true" 
    android:icon="@mipmap/ic_launcher" 
    android:shortcutShortLabel="@string/compose_shortcut_short_label2" 
    android:shortcutLongLabel="@string/compose_shortcut_short_label2" 
    android:shortcutDisabledMessage="@string/compose_shortcut_short_label2"> 
    <intent 
     android:action="android.intent.action.VIEW" 
     android:targetPackage="com.example.nilkash.shortcutmenu" 
     android:targetClass="com.example.nilkash.shortcutmenu.SampleActivity3" > 
     <extra android:name="val" android:value="2" /> 
    </intent> 
    <categories android:name="android.shortcut.conversation" /> 
</shortcut> 

とマニフェストで私がコメントを追加しました:

<activity android:name=".MainActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

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

は私のコードで間違ったいずれかのものがあります。助けが要る。ありがとうございました。

+0

あなたのマニフェストを投稿してください。 –

+0

質問をマニフェストコードで更新しました。私を助けてください。 – nilkash

+0

何が起こっているのかについては私の答えを見てください。あなたは何をしたいですか? –

答えて

2

はあなたのマニフェストを投稿した後、これを確認することができますが、私は次のように推測しているが起こっている:あなたが最初のショートカットを使用する場合

、Androidのアプリのための新しいタスクを作成し、タスクにSampleActivity2を起動します。 HOMEを押すと、このタスクがバックグラウンドに送信されます。

ここで2番目のショートカットを使用します。 SampleActivity3taskAffinityと同じSampleActivity2なので、SampleActivity2を含む既存のタスクをフォアグラウンドに持ち込み、そのタスクにSampleActivity3を起動します。あなたの仕事は今やSampleActivity2 - >SampleActivity3です。ホームをもう一度押します。タスクはバックグラウンドに移動されます。

最初のショートカットを使用すると、Androidは既存のタスクの "ルート" Activityを起動しようとしていることを認識し、既存のタスクをフォアグラウンドに持ち込み、新しいActivityを起動しません。タスクにはSampleActivity2 - >SampleActivity3が含まれているため、SampleActivity3が表示されます。これはタスクの先頭のActivityです。この動作は、実行中のWhatsappなどがある場合とまったく同じです.HOMEを押してから、HOME画面のWhatsappアイコンを押します。これは「最初からWhatsappを開始する」ではなく、Whatsappを含む現在のタスクを、バックグラウンドに移動したときのどのような状態でも、フォアグラウンドに持ち込むだけです。

ホームを押して2つ目のショートカットを使用すると、Androidは同じtaskAffinityのタスクをSampleActivity3として見つけ、既存のタスクをフォアグラウンドに持ち込みます。 Androidは現在何もしません(SampleActivity3launchMode="singleTop"がある場合)。またはSampleActivity3の新しいインスタンスを作成し、それをタスクに起動します。その場合、タスクには3つのActivityインスタンスが含まれます:SampleActivity2 - >SampleActivity3 - >SampleActivity3このタスクの先頭はActivityなのでSampleActivity3と表示されます。

+0

私は同じことについてより多くの観察をしました。同じタイプのインテントを持つショートカットの静的な方法で実装するとします。その後、正常に動作します。しかし、私がショートカットの動的な方法でそれを行う場合、それは正常に動作しません。これらの2つのアプローチには違いがありますか?いいえの場合、どちらの場合も同様の方法で動作するはずです。何か間違っている場合は私を修正してください。私は静的な方法で私の質問を更新します。私を助けてください。 – nilkash

+0

「うまくいく」とは何かを説明してください。あなたのアプリがショートカット1からバックグラウンドで起動し、ショートカット2をクリックした場合にはどうなると思いますか?アプリの実行中に何が起こったのかテストしましたか?静的なショートカットを使用して戻るボタンを押したときに何が起こったのかテストしましたか?これを構築する方法は約十数種類あります。それぞれの場合に必要なナビゲーションに依存しています。あなたは 'adb shell dumpsys activity activities'を使っていつでもアクティビティスタックを見ることができます –

+0

これは静的ショートカットの場合のシナリオです。ショートカット1をクリックするとSampleActivity1が開きます。ホームボタンをクリックしてアプリをバックグラウンドにします。今すぐshortcut2をクリックすると、SampleActivity2.Clickホームボタンが開き、アプリがバックグラウンドに移動します。ここでもう一度shortcut1をクリックします。 - > SampleActivity1が開きます。これは問題ありません。 – nilkash

関連する問題