Commit 108b1de2 authored by YONG-LIN SU's avatar YONG-LIN SU

新增權限請求功能

parent b8e8a9af
...@@ -34,7 +34,8 @@ import ecom.android.newparkapp.entity.VehicleColor; ...@@ -34,7 +34,8 @@ import ecom.android.newparkapp.entity.VehicleColor;
import ecom.android.newparkapp.entity.VehicleType; import ecom.android.newparkapp.entity.VehicleType;
// DataBase 一個資料庫一個,並涵蓋多個資料表 // DataBase 一個資料庫一個,並涵蓋多個資料表
@Database(entities = {Case.class, Road.class, Space.class, SpaceRate.class, SpaceStatus.class, SpaceType.class, User.class, UserPermission.class, VehicleBrand.class, VehicleColor.class, VehicleType.class}, version = 1) @Database(entities = {Case.class, Road.class, Space.class, SpaceRate.class, SpaceStatus.class, SpaceType.class, User.class, UserPermission.class, VehicleBrand.class, VehicleColor.class, VehicleType.class},
version = 1)
@TypeConverters({LocationConverter.class, TimestampConverter.class}) @TypeConverters({LocationConverter.class, TimestampConverter.class})
public abstract class InfoDatabase extends RoomDatabase { public abstract class InfoDatabase extends RoomDatabase {
public abstract CaseDao caseDao(); public abstract CaseDao caseDao();
......
package ecom.android.newparkapp.view; package ecom.android.newparkapp.view;
import androidx.appcompat.app.AppCompatActivity; import static android.Manifest.permission.ACCESS_COARSE_LOCATION;
import androidx.databinding.DataBindingUtil; import static android.Manifest.permission.ACCESS_FINE_LOCATION;
import androidx.lifecycle.ViewModelProvider; import static android.Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS;
import static android.Manifest.permission.READ_EXTERNAL_STORAGE;
import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE;
import android.content.Intent; import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Bundle; import android.os.Bundle;
import android.widget.Toast; import android.widget.Toast;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.databinding.DataBindingUtil;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModelProvider;
import java.util.Map;
import ecom.android.newparkapp.R; import ecom.android.newparkapp.R;
import ecom.android.newparkapp.databinding.ActivityMainBinding; import ecom.android.newparkapp.databinding.ActivityMainBinding;
import ecom.android.newparkapp.repository.InfoRepository;
import ecom.android.newparkapp.viewModel.UserViewModel; import ecom.android.newparkapp.viewModel.UserViewModel;
public class MainActivity extends AppCompatActivity { public class MainActivity extends AppCompatActivity {
...@@ -18,20 +30,67 @@ public class MainActivity extends AppCompatActivity { ...@@ -18,20 +30,67 @@ public class MainActivity extends AppCompatActivity {
private ActivityMainBinding dataBinding; private ActivityMainBinding dataBinding;
private ViewModelProvider viewModelProvider; private ViewModelProvider viewModelProvider;
private UserViewModel userViewModel; private UserViewModel userViewModel;
private ActivityResultLauncher<String[]> requestPermissionLauncher;
private String[] permissions = new String[]{ WRITE_EXTERNAL_STORAGE, READ_EXTERNAL_STORAGE,
ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION, ACCESS_LOCATION_EXTRA_COMMANDS};
private MutableLiveData<Boolean> hasPermissions = new MutableLiveData<>();
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
dataBinding = DataBindingUtil.setContentView(this, R.layout.activity_main); dataBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);
viewModelProvider = new ViewModelProvider(this); viewModelProvider = new ViewModelProvider(this);
userViewModel = viewModelProvider.get(UserViewModel.class); userViewModel = viewModelProvider.get(UserViewModel.class);
userViewModel.setCurrentUser(); userViewModel.setCurrentUser();
dataBinding.setUserViewModel(userViewModel); dataBinding.setUserViewModel(userViewModel);
resultLauncherRegister();
// 檢查權限
permissionRequest();
hasPermissions.observe(this, has -> {
if (has){
eventBinding(); eventBinding();
} }
});
}
private void permissionRequest(){
// 參考資料 https://developer.android.com/training/permissions/requesting
hasPermissions.setValue(false);
if (!checkPermissions()){
requestPermissionLauncher.launch(permissions);
}else {
hasPermissions.setValue(true);
}
}
private boolean checkPermissions(){
boolean ret = true;
for (String permission : permissions){
if(ActivityCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED){
ret = false;
break;
}
}
return ret;
}
private void resultLauncherRegister(){
requestPermissionLauncher = registerForActivityResult(
new ActivityResultContracts.RequestMultiplePermissions(),
results -> {
for (Map.Entry<String, Boolean> result : results.entrySet()) {
if (!result.getValue()){
return;
}
}
hasPermissions.setValue(true);
}
);
}
/** /**
* 所有事件註冊及綁定 * 所有事件註冊及綁定
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment