簡體   English   中英

需要從字符串源打開意圖

[英]Need to Open an Intent from a String Source

我在這里面臨挑戰。 我創建了一個列表(在 listView 中),當我選擇一個(該列表的)項目時,它返回一個字符串。 我需要用這個字符串打開一個新屏幕。

讓我嘗試解釋一下:此列表包含以下內容(此處僅顯示一小部分):

"ACTION_SETTINGS", "ACTION_SHOW_REGULATORY_INFO", "ACTION_SOUND_SETTINGS", "ACTION_STORAGE_VOLUME_ACCESS_SETTINGS", "ACTION_APPLICATION_DETAILS_SETTINGS",
"ACTION_SYNC_SETTINGS", "ACTION_USAGE_ACCESS_SETTINGS", "ACTION_USER_DICTIONARY_SETTINGS"  blablabla...

實際上像上述選項一樣有一百多個選項。 這些選項是特定的配置選項。 因此,當我單擊其中一個選項時,它應該打開“特定配置屏幕”。

如果我這樣做它可以工作,但我想要的是從列表中選擇而不是這樣:

Intent intent = new Intent(android.provider.Settings.ACTION_SOUND_SETTINGS);
startActivity(intent);

// 以上是執行此操作的“靜態”方式(但有效)

我想要的是一種“動態”的方式來做到這一點。

就像是:

String novaTela = "android.provider.Settings."  + listaConf.getItemAtPosition( i ).toString();
// above listaConf is my ListView
Intent intent = new Intent(novaTela);

我已經嘗試解析但從未工作過。 像這樣的東西:

Intent intent = Intent.parseIntent(sIntent); // I don't know it is possible

如果我使用這樣的“固定參數”:

Intent intent = new Intent(android.provider.Settings.ACTION_SOUND_SETTINGS);
startActivity(intent); 

那行得通...但是如果我嘗試這樣的“動態”方式:

    String novaTela = "android.provider.Settings." + listaConf.getItemAtPosition( i ).toString(); 
Intent intent = new Intent(novaTela);

我收到一個錯誤:

未找到處理 Intent 的活動
{act=android.provider.Settings.ACTION_SOUND_OPTIONS}

有人可以幫我嗎?

實際上你從這條線上得到了什么

String setting = android.provider.Settings.ACTION_SETTINGS;

"android.settings.SETTINGS"

直接傳入Intent就可以了:

Intent intent = new Intent("android.settings.SETTINGS");
startActivity(intent);

所以這應該可以解決您的問題:

String novaTela = listaConf.getItemAtPosition( i ).toString().replace("ACTION_","android.settings."); 
Intent intent = new Intent(novaTela);

好吧,我的朋友 Myo (dguy) 幫助我並找到了最終解決方案。 代碼如下:

 // adiciona o clique na lista
        listaConf.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

                // current String from your list
                String current = listaConf.getItemAtPosition( i ).toString();
                /* pega o item selecionado na ListView */
                txtConf.setText(current);
                try{

                // By java refelection, get the actual String from "android.provider.Settings" class to pass into Intent
                Field f = android.provider.Settings.class.getField(current);
                String setting = (String)f.get(null);
                /* passa o item para a Intent */
                Intent intent = new Intent(setting);
                /* bloco para evitar que o app pare por erro */

                    startActivity(intent);
                } catch (Exception e ){
                    Toast.makeText(MainActivity.this, "ERRO: " + e.getMessage().toString(), Toast.LENGTH_SHORT).show();
                }
            }
        });

這按我需要的方式工作,我發布它是因為可能對某人有用。 再次感謝 Myo (dguy)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM