728x90
반응형
현재 서비스 중인 테블릿에서 도는 앱을 점주들이, 컨트롤 타워에서 끄기를 원하는 요구사항이 들어왔다.
일단 system에 접근하여 shut down을 하기위해서는
제조사의 플랫폼키 가 필요하다
해당 내용으로 사이닝을 하지않으면, permission denied 가 난다.
app/build.gradle 에서
signingConfigs {
debug {
storeFile file("debug.keystore")
storePassword "android"
keyAlias "androiddebugkey"
keyPassword "android"
}
release {
if (project.hasProperty("제조사 플랫폼키")) {
storeFile file(제조사 플랫폼키)
storePassword 제조사 플랫폼키
keyAlias 제조사 플랫폼키
keyPassword 제조사 플랫폼키
}
}
}
로 빌드해준다.
브릿지를 태워야 하기에
DeviceOffModule.java 와 DeviceOffPackage.java 를 만들어준다.
DeviceOffModule.java
package 프로젝트.deviceOff
import android.app.Activity;
import android.content.ComponentCallbacks2;
import android.content.Context;
import android.content.res.Configuration;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import android.content.Intent;
import android.os.Build;
public class DeviceOffModule extends ReactContextBaseJavaModule {
private ReactApplicationContext reactContext;
public DeviceOffModule(ReactApplicationContext context) {
super(context);
reactContext = context;
}
@Override
public String getName() {
return "DeviceOff";
}
@ReactMethod
public void deviceOff() {
Intent intent;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
intent = new Intent("com.android.internal.intent.action.REQUEST_SHUTDOWN");
} else {
intent = new Intent("android.intent.action.ACTION_REQUEST_SHUTDOWN");
}
intent.putExtra("android.intent.extra.KEY_CONFIRM", false);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
reactContext.startActivity(intent);
}
}
DeviceOffPackage.java
package 프로젝트.deviceOff
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import com.facebook.react.ReactPackage;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.uimanager.ViewManager;
import com.facebook.react.bridge.JavaScriptModule;
public class DeviceOffPackage implements ReactPackage {
@Override
public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
return Arrays.<NativeModule>asList(new DeviceOffModule(reactContext));
}
@Override
public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
return Collections.emptyList();
}
}
해당 package를 mainapplication.java 에서 임포트해주고
react native 에서
const { DeviceOff } = NativeModules;
DeviceOff.deviceOff();
로 실행해주면 된다.
AndroidMainfest.xml 에
<uses-permission android:name="android.permission.SHUTDOWN"/>
까지 추가하면,
해당 앱이 설치된 기기의 전원을 언제든지 끌수 있다.
728x90
반응형
'ReactNative' 카테고리의 다른 글
[ React Native ] Memory Leak / Memory 초기 사용량 낮추기 (0) | 2024.12.18 |
---|---|
[ React Native ] Android debugging Deep dive ! (2) | 2024.11.30 |
[ React Native ] Dynamic splash screen by url (서버에서 받아오는 URL 로 스플래시 스크린 세팅하기 ) (1) | 2024.09.05 |
[ React Native ] Dynamic splash screen 적용하기 (0) | 2024.08.12 |
[ React Native ] Kakao login 중 pod install 시 CDN: trunk URL couldn't be downloaded 발생 (0) | 2024.05.02 |