権限チェックなどで使用する startActivityForResult(), onActivityResult(), requestPermissions(), onRequestPermissionsResult() が 非推奨(deprecated)ということで java でのアップデート記術例。
...▼
...▼
●startActivityForResult(), onActivityResult() 画面キャプチャ権限確認のケース
before:プロジェクト\app\src\main\java\asia\remix\myapplication\MainActivity.java
●requestPermissions(), onRequestPermissionsResult() ストレージ書き込み権限確認のケース
before:プロジェクト\app\src\main\java\asia\remix\myapplication\MainActivity.java
↓ ラムダ式を使わない場合
before:プロジェクト\app\src\main\java\asia\remix\myapplication\MainActivity.java
package asia.remix.myapplication; import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.media.projection.MediaProjection; import android.media.projection.MediaProjectionManager; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Toast; public class MainActivity extends AppCompatActivity{ private static final int RECORD_REQUEST_CODE = 101; private MediaProjectionManager mediaProjectionManager; private MediaProjection mediaProjection; @Override protected void onCreate( Bundle savedInstanceState ){ super.onCreate( savedInstanceState ); setContentView( R.layout.activity_main ); mediaProjectionManager = (MediaProjectionManager)getSystemService( MEDIA_PROJECTION_SERVICE ); } public void onClick( View view ){ Log.d( "■", "onClick()" ); Intent intent = mediaProjectionManager.createScreenCaptureIntent(); startActivityForResult( intent, RECORD_REQUEST_CODE ); } @Override protected void onActivityResult( int requestCode, int resultCode, Intent intent ){ if( requestCode == RECORD_REQUEST_CODE && resultCode == RESULT_OK ){ Log.d( "■", "onActivityResult()" ); mediaProjection = mediaProjectionManager.getMediaProjection( resultCode, intent ); // USE mediaProjection }else{ Toast.makeText( this, "must Permission Screen Capture", Toast.LENGTH_SHORT ).show(); finish(); } } }↓ after
package asia.remix.myapplication; 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.media.projection.MediaProjection; import android.media.projection.MediaProjectionManager; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Toast; public class MainActivity extends AppCompatActivity{ private MediaProjectionManager mediaProjectionManager; private MediaProjection mediaProjection; @Override protected void onCreate( Bundle savedInstanceState ){ super.onCreate( savedInstanceState ); setContentView( R.layout.activity_main ); mediaProjectionManager = (MediaProjectionManager)getSystemService( MEDIA_PROJECTION_SERVICE ); } public void onClick( View view ){ Log.d( "■", "onClick()" ); Intent intent = mediaProjectionManager.createScreenCaptureIntent(); activityResultLauncher.launch( intent ); } ActivityResultLauncher<Intent> activityResultLauncher = registerForActivityResult( new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>(){ @Override public void onActivityResult( ActivityResult result ){ if( result.getResultCode() == Activity.RESULT_OK ){ Intent intent = result.getData(); mediaProjection = mediaProjectionManager.getMediaProjection( result.getResultCode(), intent ); // USE mediaProjection }else{ Toast.makeText( MainActivity.this, "must Permission Screen Capture", Toast.LENGTH_SHORT ).show(); finish(); } } } ); }→ GitHub
●requestPermissions(), onRequestPermissionsResult() ストレージ書き込み権限確認のケース
before:プロジェクト\app\src\main\java\asia\remix\myapplication\MainActivity.java
package asia.remix.myapplication; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; import android.Manifest; import android.content.pm.PackageManager; import android.os.Bundle; import android.util.Log; import android.widget.Toast; public class MainActivity extends AppCompatActivity{ static final int STORAGE_REQUEST_CODE = 102; @Override protected void onCreate( Bundle savedInstanceState ){ super.onCreate( savedInstanceState ); setContentView( R.layout.activity_main ); if( ContextCompat.checkSelfPermission( this, Manifest.permission.WRITE_EXTERNAL_STORAGE ) != PackageManager.PERMISSION_GRANTED ){ ActivityCompat.requestPermissions( this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, STORAGE_REQUEST_CODE ); } } @Override public void onRequestPermissionsResult( int requestCode, String[] permissions, int[] grantResults ){ Log.d( "■", "onRequestPermissionsResult()" ); super.onRequestPermissionsResult( requestCode, permissions, grantResults ); if( requestCode == STORAGE_REQUEST_CODE ){ if( grantResults[0] != PackageManager.PERMISSION_GRANTED ){ Toast.makeText( this, "must WRITE_EXTERNAL_STORAGE", Toast.LENGTH_SHORT ).show(); finish(); } } } }↓ after
package asia.remix.myapplication; import androidx.activity.result.ActivityResultLauncher; import androidx.activity.result.contract.ActivityResultContracts; import androidx.appcompat.app.AppCompatActivity; import androidx.core.content.ContextCompat; import android.Manifest; import android.content.pm.PackageManager; import android.os.Bundle; import android.util.Log; import android.widget.Toast; public class MainActivity extends AppCompatActivity{ @Override protected void onCreate( Bundle savedInstanceState ){ super.onCreate( savedInstanceState ); setContentView( R.layout.activity_main ); if( ContextCompat.checkSelfPermission( this, Manifest.permission.WRITE_EXTERNAL_STORAGE ) != PackageManager.PERMISSION_GRANTED ){ launcher.launch( Manifest.permission.WRITE_EXTERNAL_STORAGE ); } } ActivityResultLauncher<String> launcher =registerForActivityResult( new ActivityResultContracts.RequestPermission(), isGranted -> { if( isGranted ){ Log.d( "■", "onActivityResult()" ); }else{ Toast.makeText( this, "must WRITE_EXTERNAL_STORAGE", Toast.LENGTH_SHORT ).show(); finish(); } } ); }→ GitHub
↓ ラムダ式を使わない場合
package asia.remix.myapplication; import androidx.activity.result.ActivityResultCallback; import androidx.activity.result.ActivityResultLauncher; import androidx.activity.result.contract.ActivityResultContracts; import androidx.appcompat.app.AppCompatActivity; import androidx.core.content.ContextCompat; import android.Manifest; import android.content.pm.PackageManager; import android.os.Bundle; import android.util.Log; import android.widget.Toast; public class MainActivity extends AppCompatActivity{ @Override protected void onCreate( Bundle savedInstanceState ){ super.onCreate( savedInstanceState ); setContentView( R.layout.activity_main ); if( ContextCompat.checkSelfPermission( this, Manifest.permission.WRITE_EXTERNAL_STORAGE ) != PackageManager.PERMISSION_GRANTED ){ launcher.launch( Manifest.permission.WRITE_EXTERNAL_STORAGE ); } } ActivityResultLauncher<String> launcher = registerForActivityResult( new ActivityResultContracts.RequestPermission() , new ActivityResultCallback<Boolean>(){ public void onActivityResult( Boolean result ){ if( result ){ Log.d( "■", "onActivityResult()" ); }else{ Toast.makeText( MainActivity.this, "must WRITE_EXTERNAL_STORAGE", Toast.LENGTH_SHORT ).show(); finish(); } } } ); }