我正在为Android开发游戏.为了帮助实现它,我的想法是创建一个视图的子类.然后我会插入此类的几个实例作为主视图的子项.每个实例都会处理它被按下的时间(通过OnTouchListener).
我现在遇到的问题是如何遍历所有这些子视图,以便我可以读取它们的状态并处理它们?(即当他们都达到某种状态时应该发生的事情).
或者,是否有更好的方法可以在屏幕上显示多个响应触摸的对象以及我可以检查其状态?
我最近尝试使用StrictMode但有一个奇怪的侵犯,所以我尝试建立一个新的 "空活动"项目(在Android Studio),并添加如下(中记载的应用程序类在这里):
public class TestApplication extends Application {
@Override
public void onCreate() {
setStrictMode();
super.onCreate();
}
private void setStrictMode() {
if (BuildConfig.DEBUG) {
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectAll()
.penaltyLog()
.build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectLeakedSqlLiteObjects()
.detectLeakedClosableObjects()
.penaltyLog()
.penaltyDeath()
.build());
}
}
}
Run Code Online (Sandbox Code Playgroud)
我在这个空项目中遇到同样的问题:
StrictMode policy violation; ~duration=165 ms: android.os.StrictMode$StrictModeDiskReadViolation: policy=65599 violation=2
堆:
at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1440)
at java.io.UnixFileSystem.getBooleanAttributes(UnixFileSystem.java:241)
at java.io.File.isDirectory(File.java:837)
at dalvik.system.DexPathList$Element.toString(DexPathList.java:634)
at java.lang.String.valueOf(String.java:2827)
at java.util.Arrays.toString(Arrays.java:4511)
at dalvik.system.DexPathList.toString(DexPathList.java:194)
at java.lang.String.valueOf(String.java:2827)
at java.lang.StringBuilder.append(StringBuilder.java:132)
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:126)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at android.view.LayoutInflater.createView(LayoutInflater.java:606) …Run Code Online (Sandbox Code Playgroud) 我在找到答案后创建了这个问题,我不确定礼仪,但似乎没问题(另外,我现在看到有一个内置选项).
问题如标题中所述,我们使用类似于此的代码创建了一个意图选择器:
String url = "waze://?ll=" + latitude + ", " + longitude + "&navigate=yes";
Intent intentWaze = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
String uriGoogle = "google.navigation:q=" + latitude + "," + longitude;
Intent intentGoogleNav = new Intent(Intent.ACTION_VIEW, Uri.parse(uriGoogle));
String title = context.getString(R.string.title);
Intent chooserIntent = Intent.createChooser(intentGoogleNav, title);
Intent[] arr = new Intent[1];
arr[0] = intentWaze;
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, arr);
context.startActivity(chooserIntent);
Run Code Online (Sandbox Code Playgroud)
并获得两个Waze图标和一个Google Maps图标; 更糟糕的是,其中一个Waze图标没有启动导航(只打开应用程序).
我们无法使用geo:意图,因为我们需要控制显示的意图(我们不想一直显示两个意图)和谷歌地图中的导航类型(例如:) &mode=w.
我已经创建了一个DrawerLayout,并且还有一个ImageView(“汉堡”)可以在单击时将其打开。
我的问题是,使用以下代码时,AndroidStudio中会显示lint错误:Must be one or more of: Gravity.LEFT, Gravity.RIGHT...,那里没有任何错误Gravity.START。
ImageView openDrawerImageView = findViewById(R.id.open_drawer_image_icon);
openDrawerImageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
drawerLayout.openDrawer(Gravity.START);
}
});
Run Code Online (Sandbox Code Playgroud) 我在将 a 居中时遇到问题,TextInput同时保持占位符可见。我希望文本从占位符开始(居中)开始。
在 IOS 上它可以工作,但在 android 上它只是部分可见。
IOS 上的结果: IOS 占位符
android 上的结果: Android 占位符
这是我的代码:
render() {
return (
<View style={styles.containerStyle}>
<TextInput
underlineColorAndroid='transparent'
placeholder={"Placeholder "}
placeholderTextColor={"grey"}
maxLength={6}
style={{ fontSize: 30, color: "black",
justifyContent: "center", }}
onChangeText={this.props.onChangeText}
value={this.props.value.toUpperCase()}
/>
</View>
);
}
}
const styles = {
containerStyle: {
flexDirection: 'row',
backgroundColor: "#fff",
borderRadius: 5,
borderWidth: 1,
shadowColor: "#000",
elevation: 2,
marginLeft: 5,
marginRight: 5,
alignItems: 'center',
justifyContent: "center"
}
};
Run Code Online (Sandbox Code Playgroud) 我一直在加载并将 a 保存Set<String>到 Android 上SharedPreferences,它似乎工作正常,直到我测试了杀死它application并意识到未保存字符串集。
Set<String> stringSet = sharedPreferences.getStringSet(Constants.PREF_SHOULD_LOAD_SET, null);
if (stringSet != null) {
if (stringSet.contains(data)) {
stringSet.remove(data);
} else {
stringSet.add(data);
}
...
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putStringSet(Constants.PREF_SHOULD_LOAD_SET, stringSet);
editor.apply();
}
Run Code Online (Sandbox Code Playgroud)
我尝试过的一些事情:
我已经尝试添加Crashlytics到我的应用程序中,该应用程序已经StrictMode启用了detectAll(). 结果是Untagged socket detected; use TrafficStats.setThreadSocketTag() to track all network usage。
全栈:
E/StrictMode: null
java.lang.Throwable: Untagged socket detected; use TrafficStats.setThreadSocketTag() to track all network usage
at android.os.StrictMode.onUntaggedSocket(StrictMode.java:2012)
at com.android.server.NetworkManagementSocketTagger.tag(NetworkManagementSocketTagger.java:78)
at libcore.io.BlockGuardOs.tagSocket(BlockGuardOs.java:47)
at libcore.io.BlockGuardOs.socket(BlockGuardOs.java:310)
at libcore.io.IoBridge.socket(IoBridge.java:667)
at java.net.PlainSocketImpl.socketCreate(PlainSocketImpl.java:116)
at java.net.AbstractPlainSocketImpl.create(AbstractPlainSocketImpl.java:98)
at java.net.Socket.createImpl(Socket.java:484)
at java.net.Socket.getImpl(Socket.java:547)
at java.net.Socket.setSoTimeout(Socket.java:1175)
at com.android.okhttp.internal.io.RealConnection.connectSocket(RealConnection.java:139)
at com.android.okhttp.internal.io.RealConnection.connect(RealConnection.java:112)
at com.android.okhttp.internal.http.StreamAllocation.findConnection(StreamAllocation.java:184)
at com.android.okhttp.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:126)
at com.android.okhttp.internal.http.StreamAllocation.newStream(StreamAllocation.java:95)
at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:281)
at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:224)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:461)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:407)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:538)
at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getResponseCode(DelegatingHttpsURLConnection.java:105)
at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getResponseCode(Unknown Source:0)
at io.fabric.sdk.android.services.network.HttpRequest.code(HttpRequest.java:1357) …Run Code Online (Sandbox Code Playgroud) 我正在使用react-native-fs构建一个类似应用程序的媒体播放器,但我无法访问项目文件夹之外的目录,我添加了以下权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
Run Code Online (Sandbox Code Playgroud)
我还使用以下代码检查读写权限:
PermissionsAndroid.check(
PermissionsAndroid.PERMISSIONS.READ_EXTERNAL_STORAGE,
).then(granted => {
if (!granted) {
PermissionsAndroid.requestMultiple([
PermissionsAndroid.PERMISSIONS.READ_EXTERNAL_STORAGE,
PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE,
]).then(result => {
console.log(result);
});
}
});
Run Code Online (Sandbox Code Playgroud)
RNFS.readDir() 抛出 null 错误:
const path = RNFS.ExternalStorageDirectoryPath;
RNFS.readDir(path).then(result => {
console.log('GOT RESULT', result);
});
Run Code Online (Sandbox Code Playgroud)
抛出的错误是:
[Error: Attempt to get length of null array]
Run Code Online (Sandbox Code Playgroud) android ×8
react-native ×2
view ×2
android-view ×1
drawerlayout ×1
google-maps ×1
gravity ×1
lint ×1
oncreate ×1
textinput ×1
viewgroup ×1
waze ×1