2014-07-04 43 views
2

我有一段C代碼(不是NDK應用,普通的C代碼), 和我試圖廣播發送到我的應用程序, 但我得到的是:從C代碼發送廣播

Broadcasting: Intent { act=com.example.A_NAME } 

我從來沒有收到完整的消息。

我運行的C代碼:

char broadcast[200]; 
    sprintf(broadcast, "sh %s","com.example.A_NAME"); 
    FILE* pipe = popen(broadcast, "r"); 
    char buffer[128]; 
    char result[1500]; 
    while(!feof(pipe)) { 
     if(fgets(buffer, 128, pipe) != NULL) 
      sprintf(result, "%s%s", result,buffer); 
    } 
    pclose(pipe); 

對於一個簡單的bash腳本,我能得到這個工作。從C,我試過system()execl()等,但沒有。

我也嘗試將該命令放入腳本文件中,並執行腳本文件。 如果我從adb shell執行腳本,它就可以工作。如果我從C代碼執行它,它不起作用。

+1

顯然與您當前的問題無關,但對您的代碼:http://stackoverflow.com/questions/5431941/while-feof-file-is-always-wrong – mafso

回答

3

浪費了一天後,我得到了它的工作:

system("am broadcast -a com.example.DAMN_BROADCAST --user 0"); 

--user 0,感謝我浪費了一天。

注意: 所有我嘗試過的命令應該可以工作。我寫了system命令,因爲它是最簡單的命令,並且可以完成這項工作(只要你把--user 0)。 execl,execlppipes也應該工作。

+2

RIP你星期五。 – redFIVE

+0

我只是試過你的解決方案,但不管系統中的命令是什麼(「...」),我總是會得到系統調用32512的ret值。任何想法? – Giuseppe