Android가 알림 표시줄 정보를 클릭한 후 실행 중인 프로그램으로 돌아가고 모든 activity를 종료합니다

6210 단어 Activity
최근에 개발 중인 응용 프로그램이 홈 키가 닫힌 후에 알림 표시줄에서 다시 켜진 후에 종료 버튼으로 응용 프로그램을 닫을 수 없다는 것을 발견했다. 인터넷에서 n을 검색한 후에 관건적인 원인을 발견했고 테스트를 실행하지 않았기 때문에 먼저 필기를 했다.
우선, 그 중 하나는 알림 표시줄에서 앱을 여는 것이 새로운activity이고 새로운task더미에 존재하기 때문일 수 있습니다. 이 경우restartpackage() 방법으로 앱의 모든activity를 닫을 수 없습니다. 해결 방법은 알림 표시줄에서 앱을 열 때 원래의 activity로 돌아오거나 모든task의 activity를 닫을 수 있습니다.
방법2는 시도해 보았지만 모든activity를 어떻게 꺼내야 할지 모르겠고task도 어떻게 제거해야 할지 모르겠습니다.방법은 지금 생각해 보면 이런 방법을 추천해야 한다. 찾은 방법 자료를 먼저 붙인다.
 
                    ,         。



    public void shownotification(String msg)

    {

        NotificationManager barmanager=(NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);

        Notification notice = new Notification(android.R.drawable.stat_notify_chat,"        ",System.currentTimeMillis());

        notice.flags=Notification.FLAG_AUTO_CANCEL;

        Intent appIntent = new Intent(Intent.ACTION_MAIN);

        //appIntent.setAction(Intent.ACTION_MAIN);

        appIntent.addCategory(Intent.CATEGORY_LAUNCHER);

        appIntent.setComponent(new ComponentName(this.getPackageName(), this.getPackageName() + "." + this.getLocalClassName())); 

        appIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK| Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);//

        PendingIntent contentIntent =PendingIntent.getActivity(this, 0,appIntent,0);

        notice.setLatestEventInfo(this,"  ","  :"+msg, contentIntent);

        barmanager.notify(STATUS_BAR_ID,notice);

       

    }

                  



                   ,      

  

(((             :            (         Run As   ),         【  】       ,          ,          Activity,       Activity    。

                        ,               。          ,            。)))

           

    “       。Intent.FLAG_ACTIVITY_CLEAR_TOP“,      

      

 
그리고 여기도 설치하는 게 좋을 것 같아요.
              Activity      ,  ,     Activity       Activity,       Activity。



 



     FLAG_ACTIVITY_NEW_TASK               Activity   。        Activity       Task,       HOME     Activity,     BACK          Activity。    (  Notification)       Task   Activity,        Task   ,         FLAG_ACTIVITY_NEW_TASK Intent   startActivity()。                         Activity,               Activity   。     :



   <activity android:name="ShowMessageActivity"

             android:launchMode="singleTask"></activity> 

            



           :



  <activity>  launchMode            : 



standard (    ) 

singleTop 

singleTask 

singleInstance 

 

더 자세히 보면 원 블로그는http://www.cnblogs.com/hanyonglu/archive/2012/04/15/2450551.html
먼저 붙이고 내일 실천 테스트를 한 후 실제 실현 방법을 붙인다.
인터넷에서 이리저리 찾았는데 찾은 문장이 매우 어려운 것 같았다. 이상의 방법은 테스트를 거쳐도 소용이 없었다. 그리고 나는 각 flag 표시를 자세히 뒤져서 이 Intent를 발견했다.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY는 내 눈앞을 밝게 했지만 테스트를 통해 나도 쓸모가 있는지 모르겠다. 왜냐하면 나의 요구는 그것을 보여주기 위한 것이 아니라 나의 응용 프로그램이 닫힐 때 문제가 생겼기 때문이다. 닫힌 후에 다시 열면 역사적인 activity에 들어가기 때문이다.
사실 특별한 수요가 없으면 어떤 flag도 추가하지 않아도 됩니다. 제 요구는 프로그램에 종료 버튼이 있기 때문에 앱을 완전히 종료하는 것도 매우 번거롭습니다. 여러 가지 방법으로 n번의 테스트를 통해api level8 이하에서activity Manager만 사용할 수 있다는 것을 발견했습니다.restartPackage(packname)가 닫히고 android4.x시스템은 이런 방법이 안 된다는 것을 발견했고 공식 문서도 이 방법을actManager로 바꾸었다.killBackground Processes, 그러나 각 버전을 호환하고 싶다면 이 방법을 사용할 수 없습니다. 나중에 홈 키 기능으로 메인 인터페이스로 돌아가고 싶습니다. 방법:
Intent intent = new Intent(Intent.ACTION_MAIN);

                    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); //     ,             activity

ntent.addCategory(Intent.CATEGORY_HOME);

startActivity(intent);

finish();

테스트 결과는 알림 표시줄에서 응용 프로그램을 열면 이 종료 방법은 모든 역사적 activity를 종료할 수 없기 때문에 알림 표시줄에서 응용 프로그램을 열면task를 새로 만들었고 Intent를 만들었다고 할 수 있습니다.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET도 내가 생각하는 역할을 하지 못했다. 아니면 현재task만 정리했다. 왜냐하면 내가 알림란에 열려 있는activity를android:launchMode="singleTask"(AndroidManifest.xml)로 설정했을 때, 종료한 후에 모든activity를 제거한 것 같다. 즉 알림란이 앱을 열었을 때 새로운task가 없다는 것이다.어쨌든 기능은 나의 요구에 도달한 것 같다. 보아하니 알림 표시줄을 열면 기본적으로 새로운task의 절차는 바꿀 수 없고 열려있는activity의 특성만 바꿀 수 있을 것 같다.

좋은 웹페이지 즐겨찾기