新しいインテントの作法 |
今までのやり方が非推奨になってしまうことがどんな言語でも
あります。アンドロイドも例外ではありません。 インテント使うときお馴染みの、startActivityForResult()が非推奨になっています。 派手に非推奨です。 じゃあどうすればいいのか?検索でヒットしたほとんどの記事が startActivityForResult() を使っています。調べるのに時間がかかりました。結果は簡単です。 アクティビティはボタン一つだけの画面です。 ActivityMain.java package com.example.intentbasic; import androidx.activity.result.ActivityResult; import androidx.activity.result.ActivityResultCallback; import androidx.activity.result.ActivityResultLauncher; import androidx.activity.result.contract.ActivityResultContracts; import androidx.appcompat.app.AppCompatActivity; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; public class MainActivity extends AppCompatActivity { ActivityResultLauncher<Intent> mSubLauncher; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mSubLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallbackSub()); } private class ActivityResultCallbackSub implements ActivityResultCallback<ActivityResult> { @Override public void onActivityResult(ActivityResult result) { String strDeviceName; if( Activity.RESULT_OK == result.getResultCode() ) { Log.d("call back", "OK: ");//こちらを通る } else { Log.d("call back", "NG: "); } } } public void onBtnClick(View v) { Intent sub = new Intent(this, SubActivity.class); //新しい作法で起動 mSubLauncher.launch(sub); } }onCreateでmSubLauncherをセットします。第2引数はインテントが終了したとき呼び出されるコールバック関数です。 onBtnClick:ボタン押下時にmSubLauncherはSubActivityを起動します。 これでSubActivityが表示されます。 次にサブアクテビティとビューを新規作成します。 ボタン1つだけの簡単なアクティビティです。 メインと一目でわかるよう背景色を紫っぽくしました。処理は凄く簡単です。 SubActivity.java package com.example.intentbasic; import androidx.appcompat.app.AppCompatActivity; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; public class SubActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sub); } public void onBtnClick(View v) { Intent intent = new Intent(); setResult( Activity.RESULT_OK, intent ); finish(); } }MainActivityにActivity.RESULT_OKを送って終了します。 AndroidManifest.xmlに新規作成したアクティビティを記述します。 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"> <application android:allowBackup="true" android:dataExtractionRules="@xml/data_extraction_rules" android:fullBackupContent="@xml/backup_rules" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.IntentBasic" tools:targetApi="31"> <activity android:name=".SubActivity" android:exported="false"> <meta-data android:name="android.app.lib_name" android:value="" /> </activity> <activity android:name=".MainActivity" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <meta-data android:name="android.app.lib_name" android:value="" /> </activity> </application> </manifest>[File]-[new]-[Activity]-[Empty Avtivity] これで生成すれば AndroidManifest.xmlに自動的にセットしてくれます。 |