Androidサイレント更新インストールと自動起動を実現

3609 ワード

プロジェクトは固定デバイスにインストールされているため、すべてのデバイスがrootされています.
一:現在のバージョン番号とサーバーバージョンは、例えば更新があればサーバーに行って新しいバージョンをダウンロードします.このネット上の多くのチュートリアルは多くありません.
二:ダウンロードしてあるディレクトリに保存し、自動的にインストールし、手動でクリックして確認する必要がなく、実際に使用しているのはsu pm install-r filepathコマンドです.コアコードは次のとおりです.
protected void excutesucmd(String currenttempfilepath) {
     Process process = null;
     OutputStream out = null;
     InputStream in = null;
     try {
         //   root
         process = Runtime.getRuntime().exec("su");
         out = process.getOutputStream();
         //     
         out.write(("pm install -r " + currenttempfilepath + "
").getBytes()); in = process.getInputStream(); int len = 0; byte[] bs = new byte[256]; while (-1 != (len = in.read(bs))) { String state = new String(bs, 0, len); if (state.equals("success
")) { // // Intent intent=new Intent(); // receiver anction intent.setAction("android.intent.action.PACKAGE_REPLACED"); // sendBroadcast(intent); } } } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } finally { try { if (out != null) { out.flush(); out.close(); } if (in != null) { in.close(); } } catch (IOException e) { e.printStackTrace(); } } }

三、自己起動
ブロードキャストUpdateRestartReceiverを登録し、インストールパッケージが再インストールされているかどうかを確認します.
public class UpdateRestartReceiver extends BroadcastReceiver
{
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals("android.intent.action.PACKAGE_REPLACED")){
            //Toast.makeText(context,"       ",Toast.LENGTH_SHORT).show();

            Intent intent2 = new Intent(context, SplashActivity.class);
            intent2.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(intent2);

        }
    }
}

AndroidManifest.xmlで

            
                
                
            

        

静的登録ブロードキャストの有効化:
//静態登録セルフスタートブロードキャストIntent=new Intent();//インベントリファイルのreceiverのanctionに対応するintent.setAction("android.intent.action.PACKAGE_REPLACED");//ブロードキャストsendBroadcast(intent);
必要な権限: