Android Activity 간 에 데 이 터 를 전달 하 는 방법 을 자세히 설명 합 니 다.
사실 이것 도 간단 합 니 다.바로 intent 의 기초 용법 입 니 다.
먼저 위의 그림(화면 이 여전히 최적화 되 지 않 았 으 니 보기 싫 으 면 보기 싫 지):
액 티 비 티 시작,그림 선택 창 열기,그림 한 장 선택
다음은 커팅 인터페이스 로 넘 어 갑 니 다.
crop 단 추 를 누 르 고 activity 를 종료 하고 원래 화면 으로 돌아 가 재단 한 그림 을 표시 합 니 다.
프로 세 스 는 이 렇 고 시스템 커팅 기능 의 전체적인 과정 을 모 의 한 셈 이다.다음은 기능 을 실현 하 는 관건 적 인 코드 와 설명 이다.
여기 서 먼저 메 인 프로그램 을 A 라 고 부 르 고 호출 된 서브루틴 은 B 이다.
B 는 자신 이 작성 한 프로그램 으로 그 를 호출 하려 면 자신의 Activity Action 을 맞 춰 야 한다.시스템 의 Action 은 모두 Action 문자열 에 대응 합 니 다.예 를 들 어 Intent 클래스 에서 정 의 된 Action 상수:
public static final String ACTION_MAIN = "android.intent.action.MAIN";
public static final String ACTION_VIEW = "android.intent.action.VIEW";
public static final String ACTION_EDIT = "android.intent.action.EDIT";
public static final String ACTION_CALL = "android.intent.action.CALL";
public static final String ACTION_CALL_EMERGENCY = "android.intent.action.CALL_EMERGENCY";
Intent 의 구조 방법 중 에는 intent.setClass(Activity.this,X.class)와 같은 것들 이 있 습 니 다.방법나 는 이런 방식 을 그다지 좋아 하지 않 는 다.그 외 에 자주 사용 되 는 구조 방법 은
public Intent(String action);
public Intent(String action, Uri uri);
String,Uri 와 같은 매개 변수 형식의 Intent 대상 을 암시 적 Intent 대상 이 라 고 합 니 다.즉,Intent 류 의 구조 방법 을 통 해 Intent 의 목표 가 어떤 Activity 인지 지정 하지 않 았 습 니 다.이 목 표 는 AndroidManifest.xml 파일 에 있 는 설정 정보 에 의존 해 야 확인 할 수 있 습 니 다.즉,action 이 가리 키 는 목 표 는 하나 가 아니 거나 AndroidManifest.xml 파일 에 같은 action 을 받 는 Activity Action 을 여러 개 설정 할 수 있 습 니 다.AndroidManifest.xml 에서 일반 파일 형식 은 다음 과 같 습 니 다.
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.crop_image_my.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
그 중에서자신의 Action 이 재단 프로그램 을 시작 해 야 하기 때문에 나 는 위의 xml 에 다음 단락 을 추가 했다.
<intent-filter>
<action android:name="com.example.crop_image_my.copper" />
<data android:scheme="crop" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
보류.MAIN 은 제 가 프로그램 이 필요 해서 따로 실행 해도 돼 요.(지우 면 어떻게 될 지 모 르 겠 어 요.테스트 안 했 어 요.)위탭 에서 scheme 를 정의 하기 때문에 뒤의 Uri 는 글 을 쓸 수 있 습 니 다.crop://something
아,맞아요.위 에 B 프로필 이 있어 요.A 는 B 를 시작 해 야 하 잖 아 요.
다음은 A 에서 B 의 Intent 를 호출 할 수 있 습 니 다.
private void startMyCropIntent(String path) throws FileNotFoundException {
Intent intent = new Intent("com.example.crop_image_my.copper", Uri.parse("crop://" + path));
startActivityForResult(intent, );
}
위의 구조 intent 는 말 하지 않 겠 습 니 다.매개 변 수 는 앞의 프로필 에 있 습 니 다.새로운 activity 를 시작 하려 면 startActivity()를 사용 하면 되 지만,되 돌아 오 는 값 을 얻 기 위해 서 는 startActivity ForResult()방법 으로 onActivity Result()에서 처리 해 야 합 니 다.두 번 째 매개 변수 12 는 요청 코드 로 onActivity Result(int requestCode,int resultCode,Intent data)의 첫 번 째 매개 변수 에 대응 합 니 다.이 숫자 는 마음대로 쓸 수 있 지만 자원 으로 쓰 는 것 을 권장 합 니 다.예 를 들 어 어떤 버튼 이 startActivity ForResult()를 터치 하면 이 버튼 의 R.id.button 1 을 요청 코드 로 사용 할 수 있 습 니 다.
자,activity 를 시작 하면 인자 에 Uri 가 있 습 니 다.이 Uri 는 제 가 선택 한 그림 의 경로 입 니 다.재단 방법 B 에서 이 Uri 를 가 져 오 려 면:
if (getIntent().getData() != null) {
imgPath = getIntent().getData().getPath(); // uri
Log.v("<DBW>", imgPath);
myCropView.setBmpPath(imgPath);
}
onCreate 에 쓰 여 있 습 니 다.구조 할 때 이 값 을 얻 고 사용 합 니 다.다음은 activity 를 닫 습 니 다.B 에 써 요.코드 바로 넣 어 주세요.
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.btn_crop:
Bitmap croppedImage = myCropView.getCroppedImage();
croppedImageView.setImageBitmap(croppedImage);
saveCroppedImage(croppedImage);
// return to the last activity
Log.v("<DBW>", newFilePath);
getIntent().putExtra("newPath", newFilePath);
setResult(, getIntent());
break;
case R.id.btn_cancel:
setResult();
break;
default:
break;
}
finish();
}
재단 후 그림 을 저장 한 다음 getIntent().putExtra()방법 으로 그림 경 로 를 intent 에 저장 합 니 다."new Path'는 데 이 터 를 얻 는 표지 로 마음대로 지은 이름 입 니 다.finish()는 이 activity 를 닫 습 니 다.인자 20 은 onActivity Result(int requestCode,int resultCode,Intent data)의 두 번 째 인자 입 니 다.마지막 으로 캡 처 한 그림 을 가 져 와 A 에 쓰 십시오.
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case :
if (resultCode == ) {
String path = data.getExtras().getString("newPath");
Log.v("<DBW>", "get------" + path);
Bitmap bmp = BitmapFactory.decodeFile(path);
iv.setImageBitmap(bmp);
} else if (resultCode == ) {
Toast toast = Toast.makeText(this, " ", Toast.LENGTH_LONG);
toast.show();
}
break;
default:
break;
}
}
switch 는 서로 다른 activity(현재 하나만 시작 하고 표지 코드 는 12)를 대상 으로 합 니 다.서로 다른 resultCode 를 다 르 게 처리 합 니 다.앞에서 putExtra 설정 데 이 터 를 사 용 했 습 니 다.여 기 는 data.getExtra 방법 으로 bundle 대상 을 얻 고 필요 에 따라 getXXX 방법 으로 다른 데 이 터 를 얻 습 니 다.
바로 이런 과정 이다.
4.28.2015
또 다른 간단 한 방법:
같은 항목 에 2 개의 activity 를 만 들 고,eclipse 항목 을 우 클릭->new->others->android->android activity
manifest.xml:
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".ShowMessage"
android:label="@string/title_activity_display_message"
android:parentActivityName=".MainActivity" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.example.android_switchactivity.MainActivity" />
</activity>
</application>
mainactivity 에 추가:
public final static String EXTRA_MESSAGE = "com.example.android_switchactivity.MESSAGE"; string , Intent intent = new Intent(this, ShowMessage.class);
EditText mEt = (EditText)findViewById(R.id.edit_message);
String message = mEt.getText().toString();
intent.putExtra(EXTRA_MESSAGE, message);
startActivity(intent);
두 번 째 activity 에 추가:
Intent intent = getIntent();
String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
TextView mTv = new TextView(this);
mTv.setTextSize(40);
mTv.setText(message);
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Android 활동의 시작 모드이 기사에서는 예제와 함께 시작 모드에 대한 자세한 설명을 볼 것입니다. 시작 모드로 이동하기 전에 몇 가지 중요한 용어가 있습니다. 애플리케이션 실행 시 새 작업이 생성되고 실행기 활동이 작업의 루트가 됩니다. 새...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.