모드를 전환하는 안드로이드 프로그램. Android에서 애플리케이션 간 전환. adb를 사용하여 컴퓨터의 소프트웨어 백업

홈 화면에서 열리는 실행기 탭에는 다음에서 다운로드하고 설치한 애플리케이션을 포함하여 휴대폰에 설치된 모든 애플리케이션에 대한 아이콘이 포함되어 있습니다. 안드로이드 마켓또는 다른 소스.

앱을 열면 사용 중인 다른 앱이 멈추지 않고 계속 실행되고, 음악을 재생하고, 웹 페이지를 표시하는 등 여러 앱을 동시에 사용할 수 있습니다. 수술실 안드로이드 시스템그리고 그 위에서 실행되는 애플리케이션은 사용되지 않는 애플리케이션이 리소스를 소비하지 않도록 통신합니다. 응용프로그램은 중지되었다가 필요할 때 다시 시작됩니다. 따라서 다운로드한 애플리케이션이 제대로 작동하지 않는다고 확신하지 않는 한 애플리케이션을 중지할 이유가 없습니다. 애플리케이션이 메모리를 사용하는 방법과 해당 애플리케이션을 관리하는 방법에 대한 자세한 내용은 을 참조하세요.

휴대폰용 추가 앱(성능 도구 포함)을 찾고 설치하는 방법에 대해 알아보세요. 유용, 게임, 참고 자료 및 기타 유형 소프트웨어) 섹션을 참조하세요.

런치패드 열기 및 닫기

런처에 들어갈 수 있는 것보다 더 많은 앱이 열려 있는 경우 런처를 위나 아래로 스크롤하여 모든 앱을 볼 수 있습니다.

런처의 아이콘이 진동할 때까지 길게 누른 다음 아이콘을 홈 화면의 원하는 위치로 드래그하여 홈 화면에 앱 아이콘을 추가할 수 있습니다.

아이콘을 탭하여 앱을 열거나 아이콘을 런치패드에서 홈 화면으로 이동하면 런치패드가 자동으로 닫힙니다.

응용 프로그램 열기

  • 실행기 패널에서 애플리케이션 아이콘을 클릭합니다.
  • 홈 화면에서 애플리케이션 아이콘을 탭하세요.

최근 사용한 앱으로 전환

최근에 사용한 모든 애플리케이션의 아이콘이 포함된 작은 창이 열립니다.

  • 아이콘을 탭하여 관련 애플리케이션을 엽니다.

아니면 버튼을 클릭하세요. 뒤쪽에현재 응용프로그램으로 돌아가려면

사용자가 연 응용 프로그램(예: 멀티태스킹 메뉴의 응용 프로그램) 간에 전환할 수 있어야 하는 응용 프로그램을 만들고 있습니다. 10개의 새 응용 프로그램에 대한 ComponentName이 있고 해당 응용 프로그램을 시작할 수 있습니다(예: 해당 응용 프로그램으로 전환) ) 이와 같이:

의도 = 새로운 의도(); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 의도.setComponent(정보); startActivity(의도);

그러나 Facebook(및 아마도 일부 유사한 앱)에서 변경하려고 하면 특정 권한을 요청합니다.

java.lang.SecurityException: 권한 거부: ProcessRecord(42310bc0 8578:com.javanut13.multitaskheads/u0a10095)에서 인텐트(flg=0x10000000 cmp=com.facebook.katana/.activity.FbFragmentChromeActivity) 시작(pid=8578, uid=10095) ) 필요하다 com.facebook.permission.prod.FB_APP_COMMUNICATION

앱을 시작하는 대신 실제로 앱으로 전환하여 이 문제를 해결할 수 있는 방법이 있나요? 포커스를 다른 애플리케이션으로 보낼 수 있나요?

0

답변 1개

권한이 없으면 "내보내기" 속성이 true로 설정된 경우에만 다른 애플리케이션의 활동을 시작할 수 있다고 생각합니다. Facebook과 유사한 앱은 이를 false로 설정하여 다른 앱이 해당 활동에 액세스하는 것을 허용하지 않을 수 있습니다.

단독으로 테스트하지는 않았지만 다음 코드를 시도해 볼 수 있습니다.

인텐트 extApp= getPackageManager().getLaunchIntentForPackage(facebook-package-name); this.startActivity(extApp);

도움이 되었기를 바랍니다.

애플리케이션이 항상 하나의 화면으로 구성되는 것은 아닙니다. 예를 들어, 우리는 매우 유용한 프로그램사용자는 작성자가 누구인지 알고 싶어합니다. 그는 '정보' 버튼을 클릭하고 다음 페이지로 이동합니다. 새 화면, 프로그램 버전, 작성자, 웹사이트 주소, 작성자의 고양이 수 등에 대한 유용한 정보가 있는 곳입니다. 활동 화면을 다른 페이지에 대한 링크가 있는 웹 페이지로 생각하십시오. 파일의 코드를 보면 MainActivity.java이전 수업에서 우리 수업이 주요 활동에도 적용됩니다 활동(또는 그의 상속인) 또는 더 정확하게는 그로부터 물려 받았습니다.

공용 클래스 MainActivity는 AppCompatActivity를 확장합니다.

짐작할 수 있듯이 다음과 유사한 새 클래스를 만들어야 합니다. 주요 활동그런 다음 버튼을 누르면 어떻게든 전환됩니다.

실험을 위해 첫 번째 강의의 프로그램을 가져와 실험용 버튼을 사용합니다. 새 프로젝트화면에 하나의 버튼으로). 다음으로 유용한 정보를 표시하는 새 양식을 만들어 보겠습니다. 예를 들어, 고양이가 좌우로 움직일 때 무엇을 하는지 사용자에게 보여주자. 동의하세요. 이것은 우주를 푸는 열쇠를 제공하는 매우 중요한 정보입니다.

스튜디오에서는 수동으로 새 활동을 생성합니다. 기성 템플릿. 그러나 거기에는 복잡한 것이 없으며 더 나은 이해를 위해서는 모든 것을 손으로 수행하는 것이 유용합니다.

새로운 XML 마크업 파일을 만들어 보겠습니다. 활동_about.xml폴더에 해상도/레이아웃. 폴더를 마우스 오른쪽 버튼으로 클릭하세요. 공들여 나열한 것그리고 다음에서 선택하세요 상황에 맞는 메뉴 신규 | 레이아웃 리소스 파일. 대화 상자가 나타납니다. 첫 번째 필드에 파일 이름을 입력하십시오. 활동_정보. 두 번째에서는 루트 요소를 입력해야 합니다. 기본적으로 거기에 있습니다 제약 레이아웃. 텍스트를 지우고 입력하세요. 스크롤뷰. 몇 글자만 입력하면 스튜디오에서 미리 만들어진 옵션을 제안할 수 있습니다. 전체 단어가 입력될 때까지 기다리지 않고 즉시 Enter 키를 누를 수 있습니다.

요소를 삽입할 해당 공백이 표시됩니다. 텍스트뷰.

정보는 리소스, 즉 문자열 리소스에서 검색됩니다. about_text. 이제 빨간색으로 강조 표시되어 정보가 없음을 나타냅니다. 누르면 가능했는데 Alt+Enter대화 상자에 텍스트를 입력합니다. 그러나 이 예에서는 텍스트가 제어 문자를 사용하여 여러 줄로 구성되므로 이 방법은 작동하지 않습니다. 그럼 다르게 해봅시다. 파일을 열어보자 입술/값/strings.xml다음 텍스트를 수동으로 입력하세요.

Lukomorye 근처에 녹색 참나무가 있습니다.\n 그 참나무에 황금 사슬이 있습니다:\n 낮과 밤 모두 과학자 고양이\n모든 것은 사슬로 돌아갑니다.\n그것은 간다 오른쪽- 노래가 시작됩니다.\n 왼쪽-그는 동화를 들려줍니다.

우리는 다음과 같은 가장 간단한 HTML 텍스트 형식 태그를 사용했습니다. , , . 우리의 예에서는 고양이와 관련된 단어와 이동 방향을 굵게 강조하는 것으로 충분합니다. 텍스트를 새 줄로 이동하려면 기호를 사용하세요. \N. 새 화면의 제목에 대한 또 다른 문자열 리소스를 추가해 보겠습니다.

프로그램 소개

우리는 표시를 알아 냈습니다. 다음으로 창에 대한 클래스를 만들어야 합니다. AboutActivity.java. 메뉴에서 선택하세요 파일 | 신규 | 자바 클래스필수 항목을 입력하세요. 처음에는 이름만 표시하는 것으로 충분합니다. 그런 다음 다른 분야를 다루게 됩니다.

공백을 얻자.

이제 수업은 거의 비어 있습니다. 코드를 수동으로 추가해 보겠습니다. 클래스는 추상 클래스에서 상속되어야 합니다. 활동아니면 그의 친척들이 좋아해요 조각 활동, AppCompatActivity등. 추가하자 활동 확장. 활동 클래스에는 메소드가 있어야 합니다. onCreate(). 클래스 내부에 마우스 커서를 놓고 메뉴에서 선택하세요. 코드 | 재정의 방법(Ctrl+O). 대화 상자에서 필요한 클래스를 찾습니다. 빠른 검색을 위해 키보드의 첫 번째 문자를 입력할 수 있습니다. 생성된 메소드에서 메소드를 호출해야 합니다. setContentView(), 그러면 준비된 마크업이 화면에 로드됩니다. 우리는 이 옵션을 갖게 될 것입니다.

패키지 ru.alexanderklimov.helloworld; android.app.Activity 가져오기; import android.os.Bundle; /** * Alexander Klimov가 2014년 12월 1일에 작성했습니다. */ 공개 클래스 AboutActivity 확장 활동 ( @Override protected void onCreate(Bundle saveInstanceState) ( super.onCreate(savedInstanceState); setContentView(R.layout.activity_about); ) )

이제 가장 중요한 부분이 나옵니다. 우리의 임무는 첫 번째 화면에서 버튼을 클릭하면 새 화면으로 이동하는 것입니다. 수업으로 돌아가자 주요 활동. 버튼 클릭 핸들러를 작성해 보겠습니다.

Public void onClick(View view) ( 의도 의도 = new Intent(MainActivity.this, AboutActivity.class); startActivity(intent); )

여기서는 강의에서 설명한 버튼 클릭 처리 방법을 사용했습니다.

새 화면을 시작하려면 클래스의 인스턴스를 만들어야 합니다. 의지첫 번째 매개변수에 현재 클래스를 나타내고 두 번째 매개변수에 이동할 클래스를 나타냅니다. 활동정보. 이 후에 메소드가 호출됩니다. 시작활동(), 새 화면이 시작됩니다.

이제 에뮬레이터에서 애플리케이션을 테스트하려고 하면 오류 메시지가 표시됩니다. 우리가 뭘 잘못했어요? 우리는 한 가지 중요한 단계를 놓쳤습니다. 새로 등록하셔야 합니다 활동선언문에서 AndroidManifest.xml. 프로젝트에서 이 파일을 찾아 두 번 클릭하세요. 파일 편집 창이 열립니다. 새 태그 추가 닫는 태그 뒤에 첫 번째 활동을 위해. 직접 입력하고 프롬프트를 적극적으로 활용하세요. 당신은 다음을 얻을 것입니다 :

문자열 리소스가 유용한 곳입니다. about_title. 응용 프로그램을 시작하고 버튼을 클릭하면 창이 나타납니다. 프로그램 소개. 이로써 새 창을 생성하고 버튼을 클릭하여 호출하는 방법을 배웠습니다. 그리고 우리는 매우 편리한 프로그램을 사용할 수 있습니다. 이제 고양이가 왼쪽으로 갈 때 무엇을 하는지에 대한 힌트를 항상 얻을 수 있습니다.

다시 한 번 생성된 두 번째 액티비티 클래스는 해당 클래스에서 상속되어야 한다는 사실에 주목합니다. 활동또는 이와 유사한 것( 목록활동등), XML 마크업 파일(필요한 경우)이 있고 매니페스트에 지정되어야 합니다.

메소드를 호출한 후 시작활동()새로운 활동이 시작됩니다(이 경우 활동정보), 표시되고 실행 중인 구성 요소가 포함된 스택의 맨 위로 이동합니다. 메소드를 호출할 때 마치다()새 활동에서(또는 하드웨어 반환 키를 누르면) 닫히고 스택에서 제거됩니다. 개발자는 동일한 방법을 사용하여 이전(또는 다른) 활동으로 이동할 수도 있습니다. 시작활동().

세 번째 화면 만들기 - 게으른 사람들을 위한 방법

프로그래머는 고양이처럼 게으른 생물입니다. 활동의 경우 마크업과 다음을 상속하는 클래스를 생성해야 한다는 점을 항상 기억하세요. 활동, 매니페스트에 클래스를 등록하는 것을 잊지 마세요.

이 경우 메뉴에서 선택하세요. 파일 | 신규 | 활동 | 기본 활동(또는 다른 템플릿). 다음으로, 새 활동을 생성하기 위한 친숙한 창이 나타납니다. 필수 입력란을 작성하세요.

버튼을 클릭하세요 마치다그러면 활동이 준비됩니다. 이를 확인하려면 매니페스트 파일을 열고 다음을 확인하세요. 새로운 항목. 클래스와 마크업 파일에 대해 말하는 것이 아닙니다. 그것들은 저절로 여러분 앞에 나타날 것입니다.

메인 액티비티 화면에 직접 새로운 버튼을 추가하고, 생성된 액티비티로 전환하는 코드를 작성하세요.

처음에는 클래스, 마크업 및 매니페스트 간의 관계를 이해할 수 있도록 새 활동에 필요한 모든 구성 요소를 수동으로 생성하는 것이 좋습니다. 그리고 익숙해지면 활동 생성 마법사를 사용하여 작업 속도를 높일 수 있습니다.

활동 간 데이터 전달

우리는 다른 활동 화면을 호출하기 위해 간단한 예를 사용했습니다. 때로는 새 화면을 호출해야 할 뿐만 아니라 데이터도 해당 화면으로 전송해야 합니다. 예를 들어 사용자 이름입니다. 이 경우 특별한 영역을 이용해야 합니다. 추가 데이터, 클래스에는 의지.

지역 추가 데이터쌍의 목록입니다 핵심 가치, 의도와 함께 전송됩니다. 문자열은 키로 사용되며 모든 기본 데이터 유형, 기본 배열, 클래스 객체를 값으로 사용할 수 있습니다. 묶음등등

데이터를 다른 활동으로 전송하려면 다음 메소드를 사용하십시오. putExtra():

Intent.putExtra("키", "값");

수신 활동은 적절한 메소드를 호출해야 합니다. getIntExtra(), getStringExtra()등.:

Int count = getIntent().getIntExtra("name", 0);

이전 예제를 다시 실행해 보겠습니다. 우리에게는 이미 세 가지 활동이 있습니다. 첫 번째 활동에는 두 개의 텍스트 필드와 버튼이 있습니다. 모습다음과 같을 수 있습니다:

두 번째 활동에서는 두 번째 활동요소를 설정하다 텍스트뷰, 첫 번째 활동에서 받은 텍스트를 표시합니다. 메소드에 대해 다음 코드를 작성해 보겠습니다. onCreate()두 번째 활동에서.

@Override protected void onCreate(Bundle saveInstanceState) ( super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); String user = "Animal"; String Gift = "donuthole"; TextView infoTextView = (TextView)findViewById( R .id.textViewInfo); infoTextView.setText(user + ", 당신은 " + 선물을 받았습니다);

이제 프로그램을 실행하고 기사의 첫 번째 부분에서 설명한 대로 두 번째 창을 불러오면 기본 비문이 표시됩니다. 짐승아, 그들이 너에게 도넛 구멍을 건네줬어. 동의합니다. 그러한 메시지를 받는 것은 꽤 짜증나는 일입니다.

상황을 바로 잡자. 첫 번째 활동에 코드를 추가합니다.

Public void onClick(보기 보기) ( EditText userEditText = (EditText) findViewById(R.id.editTextUser); EditText GiftEditText = (EditText) findViewById(R.id.editTextGift); 의도 의도 = 새 의도(MainActivity.this, SecondActivity. class); // 첫 번째 텍스트 필드의 텍스트를 사용자 이름 키로 푸시합니다.intent.putExtra("username", userEditText.getText().toString()) //두 번째 텍스트 필드의 텍스트를 선물 키로 푸시합니다. intent.putExtra("선물" ", giftEditText.getText().toString()); startActivity(intent); )

우리는 그 물건을 특별한 용기에 담았습니다. 의지텍스트 필드에서 가져온 값을 가진 두 개의 키. 사용자가 텍스트 필드에 데이터를 입력하면 이 컨테이너로 이동하여 두 번째 액티비티로 전달됩니다.

두 번째 액티비티에서는 다음과 같이 메시지를 따뜻하게 받을 준비가 되어 있어야 합니다(굵은 글씨).

// 기본값 String user = "동물"; 문자열 선물 = "도넛 구멍"; user = getIntent().getExtras().getString("사용자 이름"); 선물 = getIntent().getExtras().getString("선물"); TextView infoTextView = (TextView)findViewById(R.id.textViewInfo); infoTextView.setText(user + " , 당신은 " + 선물을 받았습니다);

이제 메시지는 덜 불쾌해 보이고 어떤 사람들에게는 심지어 유쾌해 보이기도 합니다. 복잡한 예에서는 데이터를 처리할 때 검사를 추가하는 것이 좋습니다. 유형의 빈 데이터로 두 번째 활동을 시작하는 상황이 있을 수 있습니다. 없는, 이로 인해 애플리케이션이 중단될 수 있습니다.

우리의 경우에는 문자열 값이 필요하다는 것을 알고 있으므로 코드를 다음과 같이 다시 작성할 수 있습니다.

의도 의도 = getIntent(); user =intent.getStringExtra("사용자 이름");

User = getIntent().getStringExtra("사용자 이름");

이 프로그램에는 단점이 있습니다. 누구로부터 인사를 받는지 명확하지 않습니다. 잘 자란 원숭이는 익명의 출처로부터 선물을 받지 않습니다. 따라서 숙제로 다른 텍스트 필드를 추가하여 메시지를 보내는 사용자의 이름을 입력하세요.

Google은 키에 다음 형식을 사용할 것을 권장합니다. 즉, 패키지 이름을 접두사로 사용한 다음 키 자체를 사용하는 것입니다. 이 경우 다른 애플리케이션과 상호 작용할 때 키의 고유성을 확신할 수 있습니다. 이 같은:

공개 최종 정적 문자열 USER = "ru.alexanderklimov.myapp.USER";

누가 고양이 Vaska를 모함했는지 - 결과를 다시 얻습니다.

단순히 데이터를 다른 활동에 전달하는 것만으로는 항상 충분하지 않습니다. 때로는 다른 활동이 종료되었을 때 다른 활동에서 정보를 다시 가져와야 하는 경우도 있습니다. 이전에 우리가 이 방법을 사용했다면 startActivity(의도 의도), 관련 방법이 있습니다 startActivityForResult(의도 의도, int RequestCode). 방법의 차이점은 다음과 같습니다. 추가 매개변수 요청 코드. 기본적으로 스스로 생각해 낼 수 있는 정수입니다. 결과가 누구에게서 나왔는지 구별하기 위해 필요합니다. 5개의 추가 화면이 있고 여기에 1에서 5까지의 값을 할당하고 이 코드를 사용하여 처리해야 할 결과를 결정할 수 있다고 가정해 보겠습니다. -1 값을 사용하면 메소드를 호출하는 것과 동일합니다. 시작활동(), 즉. 우리는 어떤 결과도 얻지 못할 것입니다.

방법을 사용하면 startActivityForResult(), 결과를 받으려면 코드의 메서드를 재정의해야 합니다. onActivityResult()그리고 그 결과를 처리합니다. 혼란스러운? 예를 살펴보겠습니다.

당신이 탐정이라고 가정해 봅시다. 한 식당의 유력 인사 테이블에서 소시지 2조각과 기타 물품이 도난당했다는 제보를 받았습니다. 까마귀, 빌어 먹을 개, 고양이 Vaska 등 세 명의 용의자가 의심되었습니다.

방문객 중 한 명이 자신의 자랑스러운 iPhone에서 일련의 사진을 제공했습니다.


또 다른 목격자의 증언도 있습니다. 그리고 Vaska는 듣고 먹습니다.

새 프로젝트 만들기 셜록두 가지 활동으로. 첫 번째 화면에는 두 번째 화면으로 전환하는 버튼과 도둑의 이름이 표시되는 텍스트 라벨이 있습니다.


맨 위