« FTPのみのレンタルサーバーをGitで更新したい | メイン | RequestMultiplePermissions()記述例 »

Android

deprecated対応

 権限チェックなどで使用する startActivityForResult(), onActivityResult(), requestPermissions(), onRequestPermissionsResult() が 非推奨(deprecated)ということで java でのアップデート記術例。
...▼
●startActivityForResult(), onActivityResult() 画面キャプチャ権限確認のケース
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();
				}
			}
		}
	);
}

トラックバック

このエントリーのトラックバックURL:
https://www.remix.asia/cgi/mt/mt-tb.cgi/7717

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)