2015-04-30 51 views
1

我正在開發一款能夠附加相機圖像的android應用程序。 附加按鈕在兩個不同的活動中,以及從精加工時相機返回請求的代碼是從一個活動到另一個不同的,這裏是我的代碼:startActivityForResult通過相機捕獲圖像返回不同的請求代碼?

File f = new File(Environment.getExternalStorageDirectory()+"/aaa/temp", "temp.jpg"); 
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f)); 
startActivityForResult(intent, 10); 

onActivityResult返回requestCode是NOT 10但「65546」,並從其他活動requestCode是「327690」!

爲什麼相機活動會丟棄啓動時發送的「10」?

這是錯誤嗎?有什麼解決方法嗎?

回答

1

我遇到了同樣的問題。在每個Activity中創建一個public static final int,並使用正確的一個作爲requestCode。此外,如果您是從Fragment調用startActivityForResult(...),嘗試用「getActivity().startActivityForResult(...)

+0

我會試着讓你知道,謝謝你... – user2005049

+1

getActivity()。做的工作和返回requestcode是「10」!!!!!!謝謝dumazt :-) – user2005049

0

您需要手動從兩個活動設置你的要求和結果代碼(請求和響應),這意味着你需要有自己的攝像機 - 改變它活動實施類。您應該在這裏發佈來自該(Camera-Activity)類的代碼,以便我們爲您提供幫助。

如其他答案中所述,使用正確的請求/結果代碼來保證安全的一個好方法是爲每個請求/結果代碼聲明公共靜態int codeX並在每次調用中使用這些變量。

爲了進一步幫助你,這裏是如何執行的併發請求和結果代碼爲兩個通信活動的例子:

  • 請求活動

     int requestCode=1; 
         int resultOk=0; 
    
         Intent intent = new Intent(getApplicationContext(), Responding.class); 
         startActivityForResult(intent,requestCode); 
    
  • 響應攝像頭,活動

     int resultOk=0; 
    
         Intent returnIntent = new Intent(); 
         // you can use this to pass your stuff to the Requesting activity 
         returnIntent.putExtra("extraStuff",stuff); 
         setResult(resultOk,returnIntent); 
         finish(); 
    
  • 要求ING活動

    int resultOk=0; 
    
    @Override 
    protected void onActivityResult(int request, int result, Intent data) { 
    super.onActivityResult(request, result, data); 
    if (result == resultok && request == requestCode) { 
        //get your extra stuff from intent 
        int result = data.getIntExtra("extraStuff", 0); 
    
    } else { 
        // Handle different scenarios 
    } 
    
    } 
    
0

onActivityResult返回requestCode是不是10,而是 「65546」,並從其他活動中requestCode爲 「327690」!

爲什麼相機活動會丟棄啓動時發送的「10」?

這是錯誤嗎?有什麼解決方法嗎?

您正在從片段開始活動並在活動中接收結果。那就是問題所在。

您需要開始活動並在活動中的片段或兩者中都獲得結果。不要混合兩者。

會發生什麼情況是,在v4支持庫碎片中,碎片索引被編碼在請求代碼的前16位中,而您的請求代碼位於後16位中。例如,65546實際上是1 << 16 + 10和327690是5 << 16 + 10。此片段索引稍後用於查找將結果傳遞給的正確片段。

+0

非常感謝你的解釋 – user2005049

相關問題