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
반응형

+ Recent posts