« deprecated対応 | メイン | VirtualDisplay 実装例 »

Android

RequestMultiplePermissions()記述例

 こちら「deprecated 対応」の「ActivityResultContracts.RequestPermission()」の複数権限時の書き方。
...▼
プロジェクト\app\src\main\AndroidManifest.xml の一部
	<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
	<uses-permission android:name="android.permission.RECORD_AUDIO" />
●ラムダ式を使う場合
プロジェクト\app\src\main\java\asia\remix\myapplication\MainActivity.java
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;

import java.util.Map;

public class MainActivity extends AppCompatActivity{
	static String[] strPermission = new String[]{
		Manifest.permission.WRITE_EXTERNAL_STORAGE
	,	Manifest.permission.RECORD_AUDIO
	};

	@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
		||  ContextCompat.checkSelfPermission( this, Manifest.permission.RECORD_AUDIO ) != PackageManager.PERMISSION_GRANTED
		){
			launcher.launch( strPermission );
		}
	}

	ActivityResultLauncher<String[]> launcher = registerForActivityResult(
		new ActivityResultContracts.RequestMultiplePermissions()
	,	isGranted -> {//★
			boolean allGranted = true;
			for( String key : isGranted.keySet() ){
				Log.d( "■", "onActivityResult()" + key + ":" + isGranted.get( key ) );
				if( ! isGranted.get( key ) ){
					allGranted = false;
				}
			}
			if( ! allGranted ){
				Toast.makeText( MainActivity.this, "must WRITE_EXTERNAL_STORAGE, RECORD_AUDIO", Toast.LENGTH_SHORT ).show();
				finish();
			}
		}
	);
}
上記ラムダ式では
	,	(Map<String, Boolean> isGranted) -> {
が省略。
●ラムダ式を使わない場合
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;

import java.util.Map;

public class MainActivity extends AppCompatActivity{
	static String[] strPermission = new String[]{
		Manifest.permission.WRITE_EXTERNAL_STORAGE
	,	Manifest.permission.RECORD_AUDIO
	};

	@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
		||  ContextCompat.checkSelfPermission( this, Manifest.permission.RECORD_AUDIO ) != PackageManager.PERMISSION_GRANTED
		){
			launcher.launch( strPermission );
		}
	}

	ActivityResultLauncher<String[]> launcher = registerForActivityResult(
		new ActivityResultContracts.RequestMultiplePermissions()
	,	new ActivityResultCallback<Map<String, Boolean>>(){//★
			public void onActivityResult( Map<String, Boolean> isGranted ){
				boolean allGranted = true;
				for( String key : isGranted.keySet() ){
					Log.d( "■", "onActivityResult()" + key + ":" + isGranted.get( key ) );
					if( ! isGranted.get( key ) ){
						allGranted = false;
					}
				}
				if( ! allGranted ){
					Toast.makeText( MainActivity.this, "must WRITE_EXTERNAL_STORAGE, RECORD_AUDIO", Toast.LENGTH_SHORT ).show();
					finish();
				}
			}
		}
	);
}
											

トラックバック

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

コメントを投稿

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