7

私はこのシェルスクリプトを持っています:

#!system/bin/sh
while :
do
sync
echo 3> /proc/sys/vm/drop_caches
echo "Script is been launched"
sleep 30m
done
exit 0;

このスクリプトを Android アプリで実行したいと思います。今のところ、トーストのみのボタンを作成済みです。スクリプト (free.sh) を取得して、アプリのボタンで起動するにはどうすればよいですか? または、コードをJavaで書き直す解決策はありますか? ありがとう

4

4 に答える 4

2

最初に、Eclipse を使用して単純な Android の helloworld アプリを作成します。そして、レイアウトにボタンを追加します。これは Android 開発の非常に初歩的な方法であり、 http: //d.android.com からさらに詳しく知ることができます。

ボタンの onclick コールバック関数で次のコードを試してください。

Button b = (Button)findViewById(R.id.buttonPower);
        b.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View arg0) {
                Process p=null;
                try {
                    p = new ProcessBuilder()
                    .command("PathToYourScript")
                    .start();
                } catch (IOException e) {
                    e.printStackTrace();
                } finally {
                    if(p!=null) p.destroy();
                }
            }
        });
于 2013-04-08T13:34:47.470 に答える
1

Androidアプリからシェルスクリプトを実行する方法は次のとおりです

try {
            Process process = Runtime.getRuntime().exec("sh /sdcard/test.sh");
            BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String listOfFiles = "";
            String line;
            while ((line = in.readLine()) != null) {
                listOfFiles += line;
            }
        }
        catch (IOException e) {
            e.printStackTrace();
        }
于 2017-01-11T07:45:43.033 に答える
0

コードにエラーがあります:

import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

import com.example.toast.R;

public class MainActivity extends Activity {

    private Button button;

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.tab1);

        button = (Button) findViewById(R.id.button1);

        button.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                Process process = new ProcessBuilder()
                .command("PATH")
                .redirectErrorStream(true)
                .start();
                try {
                    InputStream in = process.getInputStream();
                    OutputStream out = process.getOutputStream();
                    readStream(in);// Here: Syntax error, insert "}" to complete `Block`

                finally {
                    process.destroy();
                }
            }
        }
        }); //Here: Syntax error on token "}", delete this token
    }

    protected void readStream(InputStream in) {
        // TODO Auto-generated method stub
    }
}
于 2013-04-08T17:42:12.537 に答える
0

さて、今はエラーはありません (ありがとうございます!) が、何もしません..試してみるために、file.txt を書き込む簡単なスクリプトを作成しました。コードを参照してください:

package com.mkyong.android;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;  
import java.io.IOException;

import com.example.toast.R;

public class MainActivity extends Activity {


private Button button;

public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.tab1);

    button = (Button) findViewById(R.id.button1);
    button.setOnClickListener(new OnClickListener() {
        @SuppressLint("SdCardPath")
        @Override
        public void onClick(View arg0) {
            Process p=null;
            try {
                p = new ProcessBuilder()
                .command("/sdcard/Script/scritturafile.sh")
                .start();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if(p!=null) p.destroy();
            }
        }
    });
}
}

エラーはありませんが、ボタンを押したときにシェルが動かないと思うので、file.txtを作成しないでください

于 2013-04-09T15:40:03.573 に答える