안드로이드 의도 사용 요약

안드로이드 의도되며, 대응하는 구성 요소를 발견 할 책임 추가적인 데이터, 안드로이드이 텐트의 설명을 기반으로 설명한다 애플리케이션 간의 상호 작용과의 통신을 지원하기 위해 텐트기구와, 하나 개의 동작에서 응용 프로그램의 동작 의도 책임 활동과 관련된 데이터를 제공한다 호출 구성 요소에 전달하고, 구성 요소에 대한 호출을 완료합니다. 의도뿐만 아니라 응용 프로그램 사이에서, 또한 내부 응용 프로그램 활동 / 서비스 간의 상호 작용에 사용할 수 있습니다 사용할 수 있습니다. 즉, 발신자와 수신자 사이에 디커플링 달성하기 위해 서로 호출 된 구성 요소에 대한 정보를 제공하는 전문 중개 따라서, 여기 의도는 미디어의 역할을한다.

영상

1. 의도 역할

인 텐트는 일반적 파라미터, 안드로이드 다양한 구성 요소 간의 통신을 지원하려는 의도로 사용하여, 수행되어야 할 액션의 추상적 설명한다. ) / bindservice를 예를 들어, 만약 startActivity ()를 호출 활동을 시작하는, 또는 관심 BroadcaseReceiver 모든 broadcaseIntent ()로 전달하고, 또는 startService (가 백그라운드 서비스를 시작합니다 (). 그것은, 볼 수있는 의도가 주요 활동 또는 다른 서비스를 시작하는 데 사용되며, 목적은 활성 간의 접착제로서 이해 될 수있다.

행동의 의도 형식은 다음과 같습니다

  • 시작 활동

시작 Context.startActvity ()에 의해 활동 / Activity.startActivityForResult ();

  • 서비스 시작

Context.startService에 의해 시작 () 서비스, 또는 Context.bindService ()와 백 오피스 서비스의 상호 작용에 의해;

  • 브로드 캐스트 보내기

방송 수신기는 방송 방식 Context.sendBroadcasts () / Context.sendOrderedBroadcast () / Context.sendStickyBroadcast ()에 의해 배포

2. 의도 종

  • 노골적인 의도

명시 적, 즉 활동에 대응하는 클래스가 직접 열어야 지정한다.

1) 생성자는 구성 요소, 가장 일반적인 방법을 전달 :

Intent intent = new Intent(this, SecondActivity.class);  
startActivity(intent);  

2) setComponent 방법

Intent intent = new Intent();    
intent.setClass(this, SecondActivity.class);  
//或者intent.setClassName(this, "com.example.app.SecondActivity");  
//或者intent.setClassName(this.getPackageName(),"com.example.app.SecondActivity");            
startActivity(intent);

3) setClass / setClassName 방법

Intent intent = new Intent();    
intent.setClass(this, SecondActivity.class);  
//或者intent.setClassName(this, "com.example.app.SecondActivity");  
//或者intent.setClassName(this.getPackageName(),"com.example.app.SecondActivity");            
startActivity(intent);  

의도 명시 적으로 설정 액티비티 클래스는 고유 그래서 명시 적 의도 특히 명확한 활동을 식별 할 수 있습니다 구성 요소에 의해 직접 호출 할 필요가 있습니다. 이러한 방식을 설정하면 (예를 들어, SecondActivity.class) 클래스 클래스 객체가 될 수있다, 클래스 이름 (예를 들어, "com.example.app.SecondActivity") 패키지의 문자열 이름에 추가 할 수있다.

  • 암시 적 의도

암시 적, 명시 적으로 시작하는 활동을 지정하지만, 액션, 데이터, 카테고리를 설정, 적절한 활동 필터링 시스템을 허용하지. 모든 기반으로 심사 화면에.

액션 아래, 예를 들어 :

의 AndroidManifest.xml 파일은 처음과 활동이 호출해야합니다 그리고 포함 의도 캔 핸들을 설정하는 활동, 그리고 카테고리는 "android.intent.category.DEFAULT"로 설정되어 있습니다. 이름은 사용자 정의 할 수 있습니다, 예를 들어,되고 여기에 "표시"를 가정 문자열 작업입니다 :

<activity  
    android:name="com.example.app.SecondActivity">  
    <intent-filter>  
        <action android:name="mark"/>  
        <category android:name="android.intent.category.DEFAULT"/>  
    </intent-filter>  
</activity>  

그런 다음, MainActivity에, 당신은 액션 이름으로 정상 활동을 찾을 수 있습니다. 다음 두 가지 방법에, setAction 작업 및 공법 두 가지 방법에서와 동일한 효과가 제공된다.

1)에, setAction 방법

Intent intent = new Intent();  
intent.setAction("mark");  
startActivity(intent);

2) 동작 생성자 직접

Intent intent = new Intent("mark");  
startActivity(intent);

응용 프로그램 간의 상호 영향을 방지하기 위해, 일반적으로 이름을 명명 + 액션, 예를 들어, 여기에 "표시"라는 이름의 패키지 이름은 "이 com.example.app.Test"로 변경해야합니다, 매우 비합리적이다.

3. 의도 재산

텐트 오브젝트는 일반적으로 일곱 개 속성 구성 : 액션 (액션), 데이터 (데이터), 분류 (카테고리), 유형 (데이터 타입), 컴포넌트 (구성 요소), 추가 (확장 정보), 깃발 (플래그). 일반적으로 사용되는 대부분의 데이터 속성과 액션의 속성입니다.

  • 액션 : 액션은 의도를 보여

문자열 변수는 클래스 의도 수행 될 액션을 지정하기 위해 사용될 수있다. 일반적인 행동입니다 :

활동 작업 :

유형 효과
ACTION_MAIN 이 프로그램 항목을 나타냅니다
ACTION_VIEW 데이터는 자동으로 가장 적절한 방식으로 표시됩니다
ACTION_EDIT 한 것으로 편집 할 수 있습니다
ACTION_PICK 한 데이터 및 반환을 선택
ACTION_DAIL 데이터 포인트는 Dailer 인터페이스 다이얼 번호를 표시
ACTION_CALL 데이터는 번호로 전화를 걸 지적
ACTION_SEND 데이터는 지정된 장소로 전송됩니다
ACTION_SENDTO 데이터는 여러 그룹에 지정된 장소로 전송됩니다
ACTION_RUN 실행 데이터, 데이터 무엇인지에 상관없이
ACTION_SEARCH 검색을 수행
ACTION_WEB_SEARCH 온라인 검색을 수행합니다
ACRION_SYNC 데이터 동기화 수행
ACTION_INSERT 빈 용기에 항목 추가

방송 작업 :

유형 효과
ACTION_TIME_TICK 현재 시간을 변경하고 실시간 전송 시간은 시스템을 통해 전송 될 수 있습니다. 통화 형식 "android.intent.action.TIME_TICK"
ACTION_TIME_CHENGED 시간을 설정합니다. 통화 형식 "android.intent.action.TIME_SET"
  • 데이터 : 작업을 나타내는 데이터를 조작 할 수 있습니다

URI 객체는 참조 데이터의 표현, 또는 데이터는 MIME 타입, 데이터 타입 의도 작용에 의해 결정된다.

  • 카테고리 : 작업에 대한 성능 범주

구성 요소의 유형 인 텐트를 처리하기 위해 무엇을 나타내는 추가 정보를 포함하는 의도 문자열입니다. 카테고리 설명 임의의 수는 인 텐트에 추가 할 수 있지만, 의도 카테고리를 많이 필요로하지 않습니다, 다음은 몇 가지 일반적인 범주 있습니다 :

유형 효과
CATEGORY_DEFAULT 세트 시작 구성 요소 구성 요소 암시 할 수있다
CATEGORY_LAUNCHER 액션은 최상위 실행에 설정되어 있습니다. 그리고 이루어지는 활동 아이콘이 특성은 치환기 정의 프로그램 아이콘을 정의
CATEGORY_BROWSABLE 텐트 지점을 네트워크 관련 때이 범주를 추가해야합니다
CATEGORY_HOME 홈 화면으로 의도 점
CATEGORY_PREFERENCE 활동은 환경 설정 패널 환경 설정 패널의 정의입니다
  • 입력 : 지정에게 데이터의 유형을

의도 일반 데이터 유형은 데이터 자체에 기초하여 결정될 수 있지만,이 속성을 설정하는 대신 지정된 종류 명시 유도를 강제 할 수있다.

  • 구성 요소 : 목적의 구성 요소

의도 지정 대상 부품 명, 속성이 지정 될 때, 시스템은 직접 해당 요소를 시작하기 위해 다른 특성과 일치하는 정합 속성을 이동한다.

  • 추가 : 확장 된 정보

추가 키 - 값 데이터는 의도 캔 캐리, 당신은 putExtra () 메소드, 데이터 값을 각 키에 대응을 호출하여 데이터를 설정할 수 있습니다. 또한 번들 객체를 생성하여 모든 데이터를 저장하고 putExtras () 메서드를 호출하여 데이터를 설정할 수 있습니다.

유형 효과
EXTRA_BCC 저장 이메일 주소의 문자열 배열 숨은
EXTRA_CC 문자열 배열의 E 메일 주소 저장 복사물
EXTRA_EMAIL 문자열 배열의 전자 메일 주소를 저장
EXTRA_SUBJECT 메시지 제목 문자열을 저장
EXTRA_TEXT 메시지 내용을 저장
EXTRA_KEY_EVENT 저장소의 KeyEvent의 방법은 트리거 버튼 의도 객체
EXTRA_PHONE_ 번호 전화 번호는 전화를 저장 ACTION_CALL

신고 : 원하는 작동 모드의 의도

시스템이 활동을 시작하는 방법을 표시하는 데 사용됩니다, 플래그 레이블 SETFLAGS에 의해 의도에서 사용할 수있는 () 또는 addFlags ().

유형 효과
FLAG_ACTIVITY_CLEAR_TOP 등가 SingleTask
FLAGE_ACTIVITY_SINGLE_TOP 등가 SingleTop
FLAG_ACTIVITY_NEW_TASK 유사 SingleInstance
FLAG_ACTIVITY_NO_HISTORY 활동을 떠난 후, 활동은 작업 스택에서 제거됩니다

4. 의도 사용

전화 걸기

// 调用拨打电话,给10010拨打电话
Uri uri = Uri.parse("tel:10010");
Intent intent = new Intent(Intent.ACTION_DIAL, uri);
startActivity(intent);
// 直接拨打电话,需要加上权限 <uses-permission id="android.permission.CALL_PHONE" /> 
Uri callUri = Uri.parse("tel:10010"); 
Intent intent = new Intent(Intent.ACTION_CALL, callUri); 

보내기 SMS 또는 MMS

 // 给10010发送内容为“Hello”的短信
Uri uri = Uri.parse("smsto:10010");
Intent intent = new Intent(Intent.ACTION_SENDTO, uri);
intent.putExtra("sms_body", "Hello");
startActivity(intent);
// 发送彩信(相当于发送带附件的短信)
Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra("sms_body", "Hello");
Uri uri = Uri.parse("content://media/external/images/media/23");
intent.putExtra(Intent.EXTRA_STREAM, uri);
intent.setType("image/png");
startActivity(intent);

웹 브라우저를 열고

// 打开百度主页
Uri uri = Uri.parse("https://www.baidu.com");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);

보내기 이메일

// 给[email protected]发邮件
Uri uri = Uri.parse("mailto:[email protected]");
Intent intent = new Intent(Intent.ACTION_SENDTO, uri);
startActivity(intent);
// 给[email protected]发邮件发送内容为“Hello”的邮件
Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_EMAIL, "[email protected]");
intent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
intent.putExtra(Intent.EXTRA_TEXT, "Hello");
intent.setType("text/plain");
startActivity(intent);
// 给多人发邮件
Intent intent=new Intent(Intent.ACTION_SEND);
String[] tos = {"[email protected]", "[email protected]"}; // 收件人
String[] ccs = {"[email protected]", "[email protected]"}; // 抄送
String[] bccs = {"[email protected]", "[email protected]"}; // 密送
intent.putExtra(Intent.EXTRA_EMAIL, tos);
intent.putExtra(Intent.EXTRA_CC, ccs);
intent.putExtra(Intent.EXTRA_BCC, bccs);
intent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
intent.putExtra(Intent.EXTRA_TEXT, "Hello");
intent.setType("message/rfc822");
startActivity(intent);

지도 및 경로 계획

 // 打开Google地图中国北京位置(北纬39.9,东经116.3)
Uri uri = Uri.parse("geo:39.9,116.3");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
// 路径规划:从北京某地(北纬39.9,东经116.3)到上海某地(北纬31.2,东经121.4)
Uri uri = Uri.parse("http://maps.google.com/maps?f=d&saddr=39.9 116.3&daddr=31.2 121.4");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);

플레이 멀티미디어

Intent intent = new Intent(Intent.ACTION_VIEW);
Uri uri = Uri.parse("file:///sdcard/foo.mp3");
intent.setDataAndType(uri, "audio/mp3");
startActivity(intent);

Uri uri = Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI, "1");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);

선택 이미지

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
startActivityForResult(intent, 2);

사진

// 打开拍照程序
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, 1);
 // 取出照片数据
Bundle extras = intent.getExtras();
Bitmap bitmap = (Bitmap) extras.get("data");
获取并剪切图片
// 获取并剪切图片
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
intent.putExtra("crop", "true"); // 开启剪切
intent.putExtra("aspectX", 1); // 剪切的宽高比为1:2
intent.putExtra("aspectY", 2);
intent.putExtra("outputX", 20); // 保存图片的宽和高
intent.putExtra("outputY", 40);
intent.putExtra("output", Uri.fromFile(new File("/mnt/sdcard/temp"))); // 保存路径
intent.putExtra("outputFormat", "JPEG");// 返回格式
startActivityForResult(intent, 0);
// 剪切特定图片
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setClassName("com.android.camera", "com.android.camera.CropImage");
intent.setData(Uri.fromFile(new File("/mnt/sdcard/temp")));
intent.putExtra("outputX", 1); // 剪切的宽高比为1:2
intent.putExtra("outputY", 2);
intent.putExtra("aspectX", 20); // 保存图片的宽和高
intent.putExtra("aspectY", 40);
intent.putExtra("scale", true);
intent.putExtra("noFaceDetection", true);
intent.putExtra("output", Uri.parse("file:///mnt/sdcard/temp"));
startActivityForResult(intent, 0);

전화 응용 프로그램 시장을 엽니 다

// 打开手机应用市场,直接进入该程序的详细页面
Uri uri = Uri.parse("market://details?id=" + packageName);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);

설정

String fileName = Environment.getExternalStorageDirectory() + "/myApp.apk";   
Intent intent = new Intent(Intent.ACTION_VIEW);   
intent.setDataAndType(Uri.fromFile(new File(fileName)),
"application/vnd.android.package-archive");   
startActivity(intent);

제거

Uri uri = Uri.parse("package:" + packageName);   
Intent intent = new Intent(Intent.ACTION_DELETE, uri);
startActivity(intent);
进入设置界面
// 进入系统设置界面
Intent intent = new Intent(android.provider.Settings.ACTION_SETTINGS);
startActivity(intent);

추천

출처www.cnblogs.com/linhaostudy/p/12244446.html