2015-09-13 97 views
1

我正在为Xposed创建一个模块,它做我想要的,但我想为用户提供一个简单的首选项屏幕来输入两个整数值。Xposed如何使用GUI首选项屏幕创建模块

我主要使用的教程可以找到here on XDA

本教程解释了必须创建一个活动来显示和管理首选项屏幕,好的。但之后,没有任何解释如何将它链接到Xposed,以便用户可以单击模块列表中的模块名称并访问首选项屏幕,而只是收到一条消息“该模块不提供用户界面”。

我没有找到任何有关如何做到这一点的文档。有人能告诉我这个吗?

回答

3

我想我已经找到了罪魁祸首(至少这为我解决了这个问题)。它似乎Xposed automatically detects if the app has launchable activity,并开始它。没有API。来源:Xposed源代码:

@Override 
public void onListItemClick(ListView l, View v, int position, long id) { 
    String packageName = (String) v.getTag(); 
    if (packageName == null) 
     return; 

    if (packageName.equals(NOT_ACTIVE_NOTE_TAG)) { 
     Intent intent = new Intent(getActivity(), XposedInstallerActivity.class); 
     intent.putExtra(XposedInstallerActivity.EXTRA_SECTION, XposedDropdownNavActivity.TAB_INSTALL); 
     startActivity(intent); 
     return; 
    } 

    Intent launchIntent = getSettingsIntent(packageName); 
    if (launchIntent != null) 
     startActivity(launchIntent); 
    else 
     Toast.makeText(getActivity(), getActivity().getString(R.string.module_no_ui), Toast.LENGTH_LONG).show(); 
} 

因此,你只需要创建一个活动,但我认为这还不够:你还必须让它在Eclipse中“启动活动”,或者您也可以通过做手工添加CATEGORY_LAUNCHER意图过滤器。

如果有效,当您将应用从eclipse推送到测试手机时,应用会自动打开(就像任何其他应用一样)。如果发生这种情况,通常应用程序也应该在Xposed内部打开。

这里有一个例子我已经把里面my class

package xxx.xxx.xxx; 

import android.os.Bundle; 
import android.preference.PreferenceActivity; 
import android.preference.PreferenceManager; 

public class MainSettingsActivity extends PreferenceActivity { 

    @SuppressWarnings("deprecation") 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     // Setup a non-default and world readable shared preferences, so that 1- we know the name (necessary for XSharedPreferences()), 2- the preferences are accessible from inside the hook. 
     PreferenceManager prefMgr = getPreferenceManager(); 
     prefMgr.setSharedPreferencesName("pref_mine"); 
     prefMgr.setSharedPreferencesMode(MODE_WORLD_READABLE); 
     addPreferencesFromResource(R.xml.pref_settings); 
    } 

} 

然后使用你的钩子里的首选项中主类:

public class Main implements IXposedHookLoadPackage { 
    public XSharedPreferences pref; 

    @Override 
    public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { 
     XSharedPreferences pref = new XSharedPreferences(Main.class.getPackage().getName(), "pref_mine"); // load the preferences using Xposed (necessary to be accessible from inside the hook, SharedPreferences() won't work) 
     pref.makeWorldReadable(); 
     pref.reload(); 
     pref.getString("some_var", "default_value"); 
     ...