我已经向Google报告了问题78084,因为该setMobileDataEnabled()方法不再可以通过反射调用.它可以通过反射从Android 2.1(API 7)到Android 4.4(API 19)进行调用,但是从Android L及更高版本开始,即使使用root,该setMobileDataEnabled()方法也不可调用.
官方回应是问题是"已关闭",状态设置为"WorkingAsIntended".谷歌的简单解释是:
私有API是私有的,因为它们不稳定,可能会在没有通知的情况下消失.
是的,谷歌,我们意识到使用反射调用隐藏方法的风险 - 甚至在Android出现之前 - 但是你需要提供一个更加可靠的答案,如果有的话,可以实现相同的结果setMobileDataEnabled().(如果您对Google的决定不满意,请登录问题78084,并尽可能多地将其加注,以便让Google知道他们的错误.)
所以,我的问题是:在Android设备上以编程方式启用或禁用移动网络功能时,我们是否处于死胡同?谷歌的这种严厉的方法在某种程度上并不适合我.如果您有Android 5.0(Lollipop)及其他方法的解决方法,我很乐意听到您在此主题中的回答/讨论.
我使用下面的代码来查看该setMobileDataEnabled()方法是否可用:
final Class<?> conmanClass = Class.forName(context.getSystemService(Context.CONNECTIVITY_SERVICE).getClass().getName());
final Field iConnectivityManagerField = conmanClass.getDeclaredField("mService");
iConnectivityManagerField.setAccessible(true);
final Object iConnectivityManager = iConnectivityManagerField.get(context.getSystemService(Context.CONNECTIVITY_SERVICE));
final Class<?> iConnectivityManagerClass = Class.forName(iConnectivityManager.getClass().getName());
final Method[] methods = iConnectivityManagerClass.getDeclaredMethods();
for (final Method method : methods) {
if (method.toGenericString().contains("set")) {
Log.i("TESTING", "Method: " + method.getName());
}
}
Run Code Online (Sandbox Code Playgroud)
但事实并非如此.
更新:目前,如果设备已植根,则可以切换移动网络.但是,对于非根设备,它仍然是一个调查过程,因为没有通用的方法来切换移动网络.
我想EditText使用2的最大行数和最大长度为20.如果EditText长度大于10,它应该自动转到新行,这样用户就不需要按Enter键.有人可以帮我解决这个问题吗?
我可以枚举配对Bluetooth设备,我需要在应用启动时检查它们当前的连接状态.
但是,我发现无法获得连接状态?!
以下是我尝试但失败的一些努力:
它有获得远程设备的键状态的方法,和用于键状态可能值如下:BOND_NONE,BOND_BONDING,BOND_BONDED.但这不是连接状态.
该方法可用于获取连接状态,但BluetoothProfile必须首先获取对象.
public abstract int getConnectionState (BluetoothDevice device);
Run Code Online (Sandbox Code Playgroud)
正如在doc中描述的那样:" 客户端应调用getProfileProxy(Context,BluetoothProfile.ServiceListener,int),以获取配置文件代理. ",它只能ServiceListener在状态发生变化时在被调用时进行检索.
如果我在启动时查询状态而没有发生任何状态更改,该怎么办?
它提供了一种方法:
public int getConnectionState (BluetoothDevice device, int profile);
Run Code Online (Sandbox Code Playgroud)
但是它不能被用于检测连接状态的的Bluetooth扬声器,作为配置文件参数只接受GATT或GATT_SERVER(用于低能量设备),其他轮廓(HEADSET,HEALTH,A2DP)不被支持.
它提供了一种方法:
public int getProfileConnectionState (int profile);
Run Code Online (Sandbox Code Playgroud)
此功能可用于检查本地Bluetooth适配器是否连接到特定配置文件的任何远程设备.它可用于检查指定的配置文件.但它不能用于检查给定的设备.
有谁知道如何获得给定Bluetooth设备的连接状态?
提前致谢.
我今天开始使用最新的Android Build Tools(ABT)v19.0.3获取消息.乍一看,我认为这可能是ABT的一个问题.但是,仔细研究发现这条消息:
android.support.v4.text.ICUCompatIcs: can't find dynamically referenced class libcore.icu.ICU
Run Code Online (Sandbox Code Playgroud)
仅在使用Proguard时显示.网上的答案对我来说没有解决方案.也许,这只是Proguard的问题(我使用的版本与Android SDK v22.3捆绑在一起).
我已将以下指令添加到proguard-project.txt文件中,但它没有区别:
-keep interface android.support.v4.** { *; }
-keep class android.support.v4.** { *; }
Run Code Online (Sandbox Code Playgroud)
有没有其他人遇到此消息并有可能的解决方案?也许来自Proguard的Eric可能会对这个问题有所了解.也许Proguard需要清理代码?我很想知道解决方案.
我有这个问题:
SELECT @rownum:=@rownum+1 'no', m.title, m.author, REPLACE(SUBSTRING_INDEX(m.content, ' ', 20), '<br>', ' '), m.viewed, m.hashid FROM book m, (SELECT @rownum:=0) r WHERE m.lang = ?1 AND m.title like CONCAT('%',?2,'%') ORDER BY m.title asc
Run Code Online (Sandbox Code Playgroud)
在@rownum:=@rownum+1MySQL的查询结果编号第Primefaces的一部分,目前没有一个设施,以显示一个编号列.
有没有办法显示Primefaces列编号而不必这样做@rownum:=@rownum+1?
如果没有,我可以使用纯粹的CriteriaBuilder方法构造上述查询吗?
我试图用这个Android类找出Reflection:
Class<?> c = Class.forName("com.android.internal.widget.LockPatternUtils");
Method method = c.getDeclaredMethod("getKeyguardStoredPasswordQuality");
method.setAccessible(true);
Object object = method.invoke(c); // Error with this line
result = object.toString());
Run Code Online (Sandbox Code Playgroud)
该方法getKeyguardStoredPasswordQuality声明为(无参数):
public int getKeyguardStoredPasswordQuality() {
// codes here
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
Exception: java.lang.IllegalArgumentException: expected receiver of type com.android.internal.widget.LockPatternUtils, but got java.lang.Class<com.android.internal.widget.LockPatternUtils>
Run Code Online (Sandbox Code Playgroud)
我如何申报com.android.internal.widget.LockPatternUtils接收者?
我刚刚更新了我的Android Studio和Android SDK,现在我无法在我的XML中做任何事情.它显示了与之前相同的东西,但我无法添加任何东西,而且有些东西搞砸了.
例:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:id="@+id/bocterAppLogo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@drawable/bocterapp"
android:contentDescription=""/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
它错误地说:"这里不允许使用Element ImageView".
你知道为什么会这样吗?
干杯!
我的JSF 2项目结构如下:
root
...
WebContent
META-INF
resources
css
images
javascript
templates
commonLayout.xhtml
footer.xhtml
header.xhtml
views
main
index.xhtml
WEB-INF
index.jsp
Run Code Online (Sandbox Code Playgroud)
当我尝试在http://localhost/home/main/index.jsf查看我的页面时遇到此错误:
java.io.FileNotFoundException
at org.apache.naming.resources.DirContextURLConnection.getInputStream(DirContextURLConnection.java:381)
at com.sun.faces.facelets.impl.DefaultFaceletCache._getLastModified(DefaultFaceletCache.java:161)
at com.sun.faces.facelets.impl.DefaultFaceletCache.access$000(DefaultFaceletCache.java:62)
at com.sun.faces.facelets.impl.DefaultFaceletCache$1.newInstance(DefaultFaceletCache.java:82)
at com.sun.faces.facelets.impl.DefaultFaceletCache$1.newInstance(DefaultFaceletCache.java:79)
at com.sun.faces.util.ExpiringConcurrentCache$1.call(ExpiringConcurrentCache.java:99)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at com.sun.faces.util.ExpiringConcurrentCache.get(ExpiringConcurrentCache.java:114)
at com.sun.faces.facelets.impl.DefaultFaceletCache.getFacelet(DefaultFaceletCache.java:119)
at com.sun.faces.facelets.impl.DefaultFaceletCache.getFacelet(DefaultFaceletCache.java:62)
at com.sun.faces.facelets.impl.DefaultFaceletFactory.getFacelet(DefaultFaceletFactory.java:248)
at com.sun.faces.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:366)
at com.sun.faces.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:346)
at com.sun.faces.facelets.impl.DefaultFaceletContext.includeFacelet(DefaultFaceletContext.java:199)
at com.sun.faces.facelets.tag.ui.CompositionHandler.apply(CompositionHandler.java:155)
at com.sun.faces.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:93)
at com.sun.faces.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:82)
at com.sun.faces.facelets.impl.DefaultFacelet.apply(DefaultFacelet.java:152)
at com.sun.faces.application.view.FaceletViewHandlingStrategy.buildView(FaceletViewHandlingStrategy.java:744)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:100)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:313)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:306)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)
at …Run Code Online (Sandbox Code Playgroud) 我有这个SearchBean:
@ManagedBean(name = "searchBean")
@RequestScoped
public class SearchBean implements Serializable
{
private String input = null;
// getter methods
public String getInput() {
return input;
}
// setter method
public void setInput(String input) {
this.input = input;
}
public String Submit() {
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
我可以使用@ManagedProperty将其注入另一个bean.例如:
@ManagedBean(name = "bookBean")
@RequestScoped
public class BookBean implements Serializable
{
@ManagedProperty(value = "#{searchBean}")
private SearchBean searchBean;
@PostConstruct
public void init()
{
System.out.println("Value: " + searchBean.getInput());
}
public SearchBean getSearchBean() {
return …Run Code Online (Sandbox Code Playgroud) 在状态栏下,有五个按钮 - Wifi,蓝牙,GPS,静音模式和自动旋转.我还没有找到一种方法来检测用户何时单击"自动旋转"按钮.
我所做的是有一个服务,倾听方向的变化,如:
public class MyService extends Service {
@Override
public void onCreate() {
super.onCreate();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_CONFIGURATION_CHANGED);
this.registerReceiver(myReceiver, intentFilter);
}
public BroadcastReceiver myReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (action.equals(Intent.ACTION_CONFIGURATION_CHANGED)) {
// Show a message about orientation changes.
// This method is only called when the phone is physically rotated.
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
上述BroadcastReceiver仅在手机旋转时才有效,但如果单击"自动旋转"按钮而没有手机的任何物理旋转,则永远不会调用BroadcastReceiver方法.
我也尝试过OrientationEventListener - 但是与BroadcastReceiver方法的行为相同.
要设置方向,我使用以下方法:
Settings.System.getInt(context.getContentResolver(), "accelerometer_rotation")
Run Code Online (Sandbox Code Playgroud)
所以我知道有一种询问系统设置的方法.是否存在陷阱系统设置的[方向]更改?我已经浏览了Android文档,但找不到一个 - 也许,我正在寻找错误的地方,或者没有意图.
有没有人知道如何捕获状态栏中自动旋转按钮的更改?
更新1:我正在使用的设备是:三星Galaxy S3,三星Galaxy …
android listener orientation broadcastreceiver android-intent
我正在尝试从部署到Glassfish v3的 Web应用程序之外的服务器加载图像(和其他静态内容).我在web.xml中有以下配置,但它不适用于Glassfish(但它适用于Tomcat):
<servlet>
<servlet-name>ExternalImagesServlet</servlet-name>
<servlet-class>com.example.servlet.HttpProxyServlet</servlet-class>
<init-param>
<param-name>RemoteURI</param-name>
<param-value>http://ip.of.second.server/website-files</param-value>
</init-param>
<init-param>
<param-name>AllowedContentTypes</param-name>
<param-value>image/gif,image/jpeg,image/png</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>ExternalImagesServlet</servlet-name>
<url-pattern>/images/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
其中ip.of.second.server是服务器的实际IP地址.我有一个名为website-files.xml的文件定义如下:
<?xml version="1.0" encoding="UTF-8"?>
<Context docBase="d:/internet/website/images" />
Run Code Online (Sandbox Code Playgroud)
并将website-files.xml保存到glassfish\domains\domain1\config目录.但是Glassfish没有拿起这个配置文件.
我看过Oracle Glassfish配置doco,但没有提到如何从不同的服务器引用图像.
请帮忙.
我的豆有这个:
@ManagedBean
@ViewScoped
public class BookBean implements Serializable
{
@ManagedProperty(value = "#{param.id}") // does not work with @ViewScoped
private String id;
public void init()
{
id = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("id")
if (id != null) {
System.out.println("ID: " + id);
currentBook = bookService.find(id);
}
}
@PostConstruct
public void post()
{
// does not work with @ViewScoped
System.out.println("ID: " + id);
currentBook = bookService.find(id);
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
Run Code Online (Sandbox Code Playgroud)
目的地Facelet有这个:
<f:metadata> …Run Code Online (Sandbox Code Playgroud) android ×7
jsf-2 ×4
jsf ×2
reflection ×2
bluetooth ×1
facelets ×1
glassfish-3 ×1
java ×1
jpa-2.0 ×1
listener ×1
mysql ×1
orientation ×1
primefaces ×1
proguard ×1
view-scope ×1
xml ×1