3

안녕하세요. 안드로이드 응용 프로그램을위한 바로 가기를 개발 중입니다. 이 코드안드로이드 동적 숏컷이 적절한 활동을 두 번 열지 못합니다.

<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을 엽니 다. 홈 버튼을 클릭하고 두 번째 바로 가기를 클릭하여 응용 프로그램을 최소화했습니다. 그것은 SampleActivity3을 엽니 다. 이 시점까지 모든 것이 정확합니다. 하지만 이제 첫 번째 메뉴 나 두 번째 메뉴를 클릭하면 항상 마지막으로 최소화 된 활동 인 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

이것은 당신이 당신의 매니페스트를 게시 한 후 확인할 수 있습니다,하지만 난 추측 무슨 일이 일어나고 다음 해요 : 첫 번째 바로 가기를 사용할 때

는 안드로이드 앱의 새 작업을 생성하고 작업에 SampleActivity2를 시작합니다. 그런 다음이 작업을 백그라운드로 보내는 HOME 키를 누릅니다.

이제 두 번째 바로 가기를 사용합니다. SampleActivity3taskAffinitySampleActivity2과 같기 때문에 Android는 SampleActivity2이 포함 된 기존 작업을 포 그라운드로 가져오고 해당 작업에 SampleActivity3을 시작합니다. 이제 작업에 SampleActivity2 ->SampleActivity3이 포함됩니다. 이제 HOME 키를 다시 누릅니다. 작업이 백그라운드로 이동합니다.

이제 첫 번째 바로 가기를 사용하면 Android가 기존 작업의 "루트"Activity을 실행하려고한다는 것을 인식하고 기존 작업을 포어 그라운드로 가져오고 새로운 Activity을 실행하지 않습니다. 작업에는 SampleActivity2 ->SampleActivity3이 포함되어 있으므로 SampleActivity3이 표시됩니다. 작업의 상단이 Activity이므로 이 동작은 Whatsapp가 실행 중일 때 HOME을 누른 다음 HOME 화면의 Whatsapp 아이콘을 누를 때와 완전히 동일합니다. 이것은 "처음부터 Whatsapp을 시작하지 않습니다", Whatsapp가 포함 된 현재 작업을 배경으로 옮길 때의 상태와 상관없이 포 그라운드로 가져옵니다.

홈을 누르고 두 번째 바로 가기를 사용하는 경우 Android는 taskAffinity과 동일한 SampleActivity3으로 작업을 찾고 포어 그라운드로 가져옵니다. 안드로이드는 아무 것도하지 않고 (SampleActivity3launchMode="singleTop"이있는 경우) 또는 SampleActivity3의 새 인스턴스를 만들고이를 작업으로 시작합니다. 이 경우 작업에 3 개의 Activity 인스턴스가 포함될 것입니다 : SampleActivity2 ->SampleActivity3 ->SampleActivity3이 작업의 경우 Activity이므로 SampleActivity3이 표시됩니다.

+0

더 많은 관찰에서 나는 같은 것을 발견했다. 동일한 유형의 인 텐트가있는 바로 가기의 정적 방법으로 구현 한 경우 그럼 잘 작동합니다. 그러나 내가 지름길의 역동적 인 방법으로 해낸다면 제대로 작동하지 않습니다. 이 두 가지 접근 방식간에 차이점이 있습니까? 아니오이면 두 경우 모두 비슷한 방식으로 작동해야합니다. 어떤 일이 잘못되면 나를 바로 잡으십시오. 정적 인 방법으로 내 질문을 업데이트합니다. 제발 도와주세요. – nilkash

+0

"잘 작동한다"는 것을 설명하십시오. 앱이 바로 가기 1에서 백그라운드로 시작하고 바로 가기 2를 클릭하면 어떻게 될 것으로 예상됩니까? 앱이 실행 중이고 정적 바로 가기를 사용하고 뒤로 버튼을 누르면 어떻게되는지 테스트 해 보셨습니까? 이것을 구성하는 데 약 12 ​​가지의 다른 방법이 있으며 각각의 경우에 원하는 탐색 (또는 원하는 것으로 생각하는 탐색)에 따라 다릅니다. 'adb ​​shell dumpsys activity activities'를 사용하면 언제든지 액티비티 스택을 볼 수 있습니다. –

+0

따라서 정적 단축키의 경우 시나리오가 이렇습니다 -> shortcut1을 클릭하면 SampleActivity1이 열립니다. 홈 버튼을 클릭하고 앱을 배경으로 가져옵니다. 이제 shortcut2를 클릭하면 SampleActivity2.Click 홈 버튼을 클릭하고 앱을 배경으로 가져올 수 있습니다. 이제 다시 shortcut1을 클릭하십시오 -> SampleActivity1이 열립니다. – nilkash

관련 문제