0

Re:別のアプリを起動した後、アプリに戻ります

これで、runCommand()関数を実行するサービスを設定しました(以下を参照)が、実行コマンド内からインテントを実際に起動する場合、アプリの強制は次のように終了します。

E/AndroidRuntime (5448): FATAL EXCEPTION: Thread-931

E/AndroidRuntime (5448): android.util.AndroidRuntimeException: Calling startActvitiy() from outside of an Activity context requires the FLAT_ACTIVITY_NEW_TASK flas. Is this really what you want?

E/AndroidRuntime (5448): at android.app.ContextImpl.startActivity(ContextImpl.java:864)

E/AndroidRuntime (5448): at android.content.ContentWrapper.startActivity(ContextWrapper.java 276)

E/AndroidRuntime (5448): at packagename.MainService.runCommand(MainService.java:164)

だから私の質問は、サービスから必要なインテントを起動するにはどうすればよいですか?

私のサービスクラスは次のとおりです。

public class MainService extends Service {

boolean copied = false;
private String mHandle;
private static final int REQUEST_WINDOW_HANDLE = 1;

@Override
public IBinder onBind(Intent arg0) {
    return null;
}

@Override
public void onCreate() {

}

@Override
public void onDestroy() {

}

@Override
public void onStart(Intent intent, int startId) {
    Thread usbUpdateThread = new Thread() {
        public void run() {             
            while (true) {
                while (!copied) {
                    try {
                        Thread.sleep(180000);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
                runCommand("chmod -R 777 /media/cdrom/");
                copied = false; 
            }
        }
    };
    Thread InternetThread = new Thread() {
        public void run() {
            while (true){
                    try {
                        Thread.sleep(3600000);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    runCommand("php update.php");

            }
        }
    };
    Thread CheckThread = new Thread() {
        public void run() {
            while (true) {
                    try {
                        Thread.sleep(300000);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    runCommand("sh check.sh");
                }

        }
    };

    InternetThread.start();
    CheckThread.start();
    usbUpdateThread.start();
}


public boolean runCommand(String command) {
    Intent intent = new Intent("jackpal.androidterm.RUN_SCRIPT");
    intent.addCategory(Intent.CATEGORY_DEFAULT);
    intent.putExtra("jackpal.androidterm.iInitialCommand", command);
    intent.putExtra("jackpal.androidterm.window_handle", MainActivity.mHandle);
    startActivity(intent);


    return true;
}

}

そして、私のサービスは以下を使用して開始されます。

Intent intentService = new Intent(this, MainService.class);
    this.startService(intentService);

私の主な活動で

4

2 に答える 2

4

このフラグを追加してみてください:

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
于 2013-03-14T15:07:32.110 に答える
0

これを試してください、それはあなたの問題を解決します。

Intent mInMainAndroidAct= new Intent(getBaseContext(), myActivity.class);
mInMainAndroidAct.addCategory(Intent.CATEGORY_DEFAULT);
mInMainAndroidAct.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mInMainAndroidAct.putExtra("jackpal.androidterm.iInitialCommand", command);
mInMainAndroidAct.putExtra("jackpal.androidterm.window_handle", MainActivity.mHandle);
getApplication().startActivity(mInMainAndroidAct);
于 2013-03-14T15:18:20.927 に答える