権限チェックなどで使用する 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();
}
}
}
);
}