Androidデバイスを再起動する2つの簡単な方法


LingYunzhiが世界一だったことを知っておく必要があります。」 LiuWenqinが「 TheSkyof the Wind Dog」で組み立てラインを離れたとき、これはLiuWenqinが言ったことです。なぜ私たちはそのような人々ではないのですか?私が若い頃、LingYunは決心しました世界で一流の人間であり、世界で一流の業績を達成することですが、年月が無駄になり、名声と富はまだありません。

序文

この記事では、Androidデバイスの再起動方法焦点を当てます。ここでのAndroidデバイス、私たちが使用する携帯電話ではありません。結局のところ、現在の携帯電話はますます高度になっています。Appleシリーズの携帯電話を除いて、タイマースイッチはないようです。Android携帯にはこの機能があります。寝る前に電源を切り、朝の4時か5時に電源を入れるのが好きな人もいます。使用しても動かなくなることはないと思います。もちろん、これは少人数のグループです。多くの人は、一晩中電話で遊んで、電源が切れるまで遊んでいます。充電して寝るだけです。
さて、
私が逸脱したましょうハハ~~トピックを入力してください、なぜAndroidデバイスを再起動する必要があるのですか?Androidボードを製造する多くのメーカーが使用しているAndroidシステムのほとんどはキャスト版であるため、自社のハードウェアやサービスに必要な機能を投入し、使用されていないものをカットしていますが、一部のメーカーはこの部分をうまく処理していません。 、システムが長時間実行されていると不安定になります。たとえば、Androidボードが広告配置マシン、自動販売機などのアプリを長時間実行している場合、構成自体が十分に高くないと、システムはうまく機能しません。スタック、黒い画面、またはスタック画面の点滅の問題がある場合、ハードウェアが壊れていない限り、Androidシステムを再起動するだけで、上記の問題を解決できます。

1.システムを使用してACTION_REBOOTをブロードキャストします

このメソッドは非常に単純で、システムブロードキャストACTION_REBOOTを送信するだけで済みます。コードは次のとおりです。

       mButton.setOnClickListener(new View.OnClickListener() {
    
    
            @Override
            public void onClick(View v) {
    
    
                Intent reboot = new Intent(Intent.ACTION_REBOOT);
                reboot.putExtra("nowait", 1);
                reboot.putExtra("interval", 1);
                reboot.putExtra("window", 0);
                sendBroadcast(reboot);
            }
        });

ただし、これは再起動せず、プログラムがクラッシュしてエラーを直接報告します。


    com.xz.android72test E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.xz.android72test, PID: 3180
    java.lang.SecurityException: Permission Denial: not allowed to send broadcast android.intent.action.REBOOT from pid=3180, uid=10046
        at android.os.Parcel.readException(Parcel.java:1546)
        at android.os.Parcel.readException(Parcel.java:1499)
        at android.app.ActivityManagerProxy.broadcastIntent(ActivityManagerNative.java:2831)
        at android.app.ContextImpl.sendBroadcast(ContextImpl.java:1331)
        at android.content.ContextWrapper.sendBroadcast(ContextWrapper.java:377)
        at com.xz.android72test.MainActivity$2.onClick(MainActivity.java:115)
        at android.view.View.performClick(View.java:4780)
        at android.view.View$PerformClick.run(View.java:19866)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5293)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

主なエラーはSecurityException: Permission Denial、権限が十分でないことです。デフォルトのSDKは、アプリケーション開発者にAndroidシステムの直接シャットダウンまたは再起動APIインターフェイスを提供しません。一般的に、Androidシステムのシャットダウンまたは再起動を実現するには、より高い権限(システム権限またはさらにはルート権限)、ここでは、アプリの権限をシステムの権限に増やしAndroidManifest.xml、次のコードを見つけて追加する必要があります。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.xz.android72test" android:sharedUserId="android.uid.system">
     ..........
</manifest>

ただし、これを実行しても再起動せず、プログラムのインストールにも失敗し、エラーが直接報告されます。


Installation did not succeed.
The application could not be installed: INSTALL_FAILED_SHARED_USER_INCOMPATIBLE
Installation failed due to: 'null'

どうしてこれなの?このapkにはこのシステムの署名がないためです。署名する方法は?

3つの方法があります:

まず、この方法はより古典的で伝統的です。

  • 入手するには、Androidボードメーカーの技術を連絡するマザーボードシステムの署名ファイルを。署名ファイルplatform.pk8platform.x509.pem各Androidのボードメーカーが異なっている。signapk.jarこのファイルはさも必要。一般的に、製造業者はまた、一緒にこのファイルを送信します。それは、インターネット上でダウンロードすることも可能です。jarファイルパッケージに含まれます署名されたプログラム。
  • 窓の下では、コマンドラインモードを入力し、入力し、CMD.EXEを起動するフォルダをcd C:\Users\Administrator\Desktop\signapkAppしてplatform.pk8platform.x509.pemそしてsignapk.jarファイル。
  • 最後に、次のコマンドを入力して署名します。
java -jar signapk.jar  platform.x509.pem platform.pk8 C:\Users\Administrator\Desktop\signapkApp\app-release.apk signed_app-release.apk

その中にC:\Users\Administrator\Desktop\signapk.jar\app-release.apkは、署名が必要なapkパスがあります。これは、署名されたapkでありsigned_app-release.apk、署名されていないapkと同じディレクトリにあります。

最後に、これをインストールするadb pushadb installsigned_app-release.apkインストールした後に直接再起動できます。

次に、この方法で最初の比較が簡単になり、デバッグバージョンまたはリリースバージョンに署名することもでき
ます。Andrewsボードメーカーのテクノロジにファイルを要求するか、独自のシステムボードに従ってファイルに署名platform.pk8してplatform.x509.pem作成します。 、このファイルはplatform.keystore署名ファイルです。

次に、app\build.gradleファイルの下に次のコードを追加します。

android {
    
    

    ......
    
    signingConfigs {
    
    
        debug {
    
    
            storeFile file('platform.keystore文件路径')
            storePassword 'keystore的密码'
            keyAlias '密钥别名'
            keyPassword '密钥密码'
        }
        release {
    
    
            storeFile file('platform.keystore文件路径')
            storePassword 'keystore的密码'
            keyAlias '密钥别名'
            keyPassword '密钥密码'
        }
    }
    buildTypes {
    
    
        release {
    
    
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release
        }
        debug {
    
    
            signingConfig signingConfigs.debug
        }
    }
}

この時点で、ビルドapkのデバッグバージョンとリリースバージョンの両方にシステム署名があります。

第三に、この方法は基本的に白い売春です。メーカーが提供する署名済みのWebサイトを使用すると、署名されていないapkをサーバーにアップロードするだけで済みます。しばらくすると、署名後に自動的にダウンロードされ、このファイルはすでに署名されています。名前。
ここに写真の説明を挿入
これらの3つの方法を比較すると、最後の方法が最も簡単ですか?しかし今、人々はあまり怠惰であってはなりません。2番目の方法が推奨されます。

2つ目は、Linuxシェルを使用して再起動手順を送信する

このメソッドは非常に単純です。RuntimeJavaクラスを使用して、シェルコマンドを直接呼び出して実行し、コードを直接貼り付けます


       mButton.setOnClickListener(new View.OnClickListener() {
    
    
            @Override
            public void onClick(View v) {
    
    
                exec("reboot");
            }
        });
        

Androidデバイスにrootがない場合は、AndroidManifest.xml権限について追加する必要があるため、管理者権限を取得するには次のコードを使用します。

<uses-permission android:name="android.permission.ACCESS_SUPERUSER" />

execメソッド:

    private String exec(String command) {
    
    

        Process process = null;
        BufferedReader reader = null;
        InputStreamReader is = null;
        DataOutputStream os = null;

        try {
    
    
            process = Runtime.getRuntime().exec("su");
            is = new InputStreamReader(process.getInputStream());
            reader = new BufferedReader(is);
            os = new DataOutputStream(process.getOutputStream());
            os.writeBytes(command + "\n");
            os.writeBytes("exit\n");
            os.flush();
            int read;
            char[] buffer = new char[4096];
            StringBuilder output = new StringBuilder();
            while ((read = reader.read(buffer)) > 0) {
    
    
                output.append(buffer, 0, read);
            }
            process.waitFor();
            return output.toString();
        } catch (IOException | InterruptedException e) {
    
    
            throw new RuntimeException(e);
        } finally {
    
    
            try {
    
    
                if (os != null) {
    
    
                    os.close();
                }

                if (is != null) {
    
    
                    is.close();
                }

                if (reader != null) {
    
    
                    reader.close();
                }

                if (process != null) {
    
    
                    process.destroy();
                }
            } catch (IOException e) {
    
    
                e.printStackTrace();
            }
        }
    }

通常のユーザーは再起動を実行する権限を持っていないため、再起動が使用されAndroid设备最好是root过ます。そうsu管理员权限でない場合、ポップアップウィンドウ表示され、スーパーユーザーのアクセス権限を取得するときに要求できるかどうかを尋ねられます。これはユーザーエクスペリエンスに大きく影響します。

ここに写真の説明を挿入

ここをご覧いただきありがとうございます。お役に立てて光栄です。

おすすめ

転載: blog.csdn.net/qq_36270361/article/details/109144042