我正在尝试使用Android M附带的DataBinding Library将事件与xml中的视图绑定.我正在关注Android开发人员的示例并逐步实现.对于视图的属性,如可见性,文本工作正常,但如果我尝试与onclick绑定,它不会按预期工作.这是我到目前为止尝试过的示例代码:
<data>
<import type="android.view.View"/>
<variable name="user" type="com.example.databinding.User"/>
<variable name="handlers" type="com.example.databinding.MyHandlers"/>
</data>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.firstName}"
android:visibility="@{user.isFriend ? View.VISIBLE : View.GONE}" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Click Me"
android:id="@+id/button"
android:layout_gravity="left"
android:onClick="@{handlers.onClickFriend}"/>
Run Code Online (Sandbox Code Playgroud)
主要活动 :
public class MainActivity extends AppCompatActivity {
User user;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityMainBinding binding =
DataBindingUtil.setContentView(this,R.layout.activity_main);
user = new User("Pankaj","Kumar",true,true);
binding.setUser(user);
}
}
Run Code Online (Sandbox Code Playgroud)
MyHandlers:
public class MyHandlers {
public void onClickFriend(View view){
Log.i(MyHandlers.class.getSimpleName(),"Now Friend");
}
public void onClickEnemy(View …
Run Code Online (Sandbox Code Playgroud) data-binding android android-databinding android-6.0-marshmallow
在运行Android M Developer Preview 2的Nexus 5上,当卸载/重新安装应用程序时,设备正在检索我很久以前存储的共享首选项,例如布尔值isFirstLaunch
.
清除这些的唯一方法是从设备设置手动执行.
Android M上的共享首选项行为是否有任何变化?我找不到任何关于此的文件.
或许Android M Preview 2 ROM有一个bug ...
假设您有这样的方法:
public boolean saveFile (Url url, String content) {
// save the file, this can be done a lot of different ways, but
// basically the point is...
return save_was_successful;
}
Run Code Online (Sandbox Code Playgroud)
在整个应用程序中,如果要将文件保存到外部存储,则执行以下操作:
if (saveFile(external_storage_url, "this is a test")) {
// yay, success!
} else { // notify the user something was wrong or handle the error }
Run Code Online (Sandbox Code Playgroud)
这是一个简单的例子,所以不要对我的情况大概阻塞UI,妥善处理异常,等等.如果你不喜欢的文件保存得到的,你能想象一个getContact()
或getPhoneState()
或什么的.重点是它是一个需要许可的操作,它返回一些值并在整个应用程序中使用它.
在Android <= Lollipop中,如果用户已经安装并同意授予android.permission.WRITE_EXTERNAL_STORAGE
或其他什么,那么一切都会好的.
但是在新的Marshmallow(API 23)运行时权限模型中,在将文件保存到外部存储之前,您应该(1)检查是否已授予权限. 如果没有,可能(2)显示请求的理由(如果系统认为这是一个好主意)与吐司或其他什么,以及(3)要求用户通过对话授予权限,然后基本上坐下来等待打回来...
(所以你的应用程序坐在那里,等待...)
(4)当用户最终响应对话框时,onRequestPermissionsResult() …
每当我的设备(Nexus 5,Android M Preview 3)通过USB连接时,USB配置始终默认为"仅充电".
这是非常有问题的,因为我的设备上的USB端口有故障,有时在碰撞时会断开连接并重新连接,因此我每次都必须手动将模式从通知抽屉更改为MTP(媒体传输协议).
我正在学习本教程:如何使用Android Keystore存储密码和其他敏感信息.它(松散地)与Google Sample应用程序绑定:BasicAndroidKeyStore.
我可以使用公钥加密我的数据,我可以在运行Lollipop的设备上解密.但是我有一个运行棉花糖的Nexus 6,这个崩溃给出了错误:
java.lang.RuntimeException: Unable to create application com.android.test: java.lang.ClassCastException: android.security.keystore.AndroidKeyStoreRSAPrivateKey cannot be cast to java.security.interfaces.RSAPrivateKey
Run Code Online (Sandbox Code Playgroud)
这是它崩溃的代码:
KeyStore.Entry entry;
//Get Android KeyStore
ks = KeyStore.getInstance(KeystoreHelper.KEYSTORE_PROVIDER_ANDROID_KEYSTORE);
// Weird artifact of Java API. If you don't have an InputStream to load, you still need to call "load", or it'll crash.
ks.load(null);
// Load the key pair from the Android Key Store
entry = ks.getEntry(mAlias, null);
KeyStore.PrivateKeyEntry privateKeyEntry = (KeyStore.PrivateKeyEntry) entry;
//ERROR OCCURS HERE::
RSAPrivateKey …
Run Code Online (Sandbox Code Playgroud) java android cryptography java-security android-6.0-marshmallow
是否有意图转到Android-M中我的应用程序的"应用程序权限"屏幕?
我正在为Android-M准备我的应用程序并使用新的权限模型.我已按照链接中提到的所有步骤进行操作
https://developer.android.com/training/permissions/requesting.html
一切都已设置好并且一切都很好接受如果用户已经选中"永不再问"按钮并拒绝许可,则在下次启动时我想让用户选择转到应用程序的"应用程序权限"并自行更改权限,如果他改变了主意.我希望通过提供一个按钮,让用户直接进入我的应用程序的"应用程序权限"屏幕,让非技术娴熟的用户更容易一些.有办法吗?(这将是比给喜欢的用户指令好得多Menu
→交通Settings
→交通Applications
→交通Manage Applications
→交通选择应用程序)
谢谢你的帮助!
在Android M(预览)中,用户可以选择特定应用并检索特定权限.
所以我问如何在运行时检查授权权限?
在已安装Android Marshmallow最新更新的设备上 - 即2016年6月更新,当我要求权限时,ALLOW按钮不起作用.
我用这两个设备进行了测试:
Nexus 6p(Andoid版本 - 6.0.1,内部版本号 - MTC19V)
Nexus 7(Android版本6.0.1,内部版本号 - MOB30M)
两者都有最新的更新,当我请求权限时,会显示对话框,但我无法按下ALLOW按钮.
这是我用来请求权限的代码:
public void showPermissionsDialog() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
int hasWriteExternalStoragePermission = activity.checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE);
int hasWriteGetAccountsPermission = activity.checkSelfPermission(android.Manifest.permission.GET_ACCOUNTS);
if (hasWriteExternalStoragePermission != PackageManager.PERMISSION_GRANTED || hasWriteGetAccountsPermission != PackageManager.PERMISSION_GRANTED) {
activity.requestPermissions(new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE, android.Manifest.permission.GET_ACCOUNTS}, MainActivity.REQUEST_CODE_ASK_PERMISSIONS);
} else {
isAllPermissionsGranted = true;
}
} else {
isAllPermissionsGranted = true;
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (requestCode == REQUEST_CODE_ASK_PERMISSIONS) {
if …
Run Code Online (Sandbox Code Playgroud) 脚步:
Fragment
或请求许可Activity
onRequestPermissionsResult()
java.lang.IllegalStateException
抛出:之后无法执行此操作 onSaveInstanceState
当我在延迟一段时间后显示对话框时(使用postDelayed),这不会发生.据http://www.androiddesignpatterns.com/2013/08/fragment-transaction-commit-state-loss.html)上,我们可以蜂窝后设备commit()
之间onPause()
和onStop()
没有任何国家损失或异常.这是一个示例项目源,日志文件和记录问题的链接.
https://drive.google.com/folderview?id=0BwvvuYbQTUl6STVSZF9TX2VUeHM&usp=sharing
此外,我已经打开了一个问题https://code.google.com/p/android/issues/detail?id=190966,但它被标记为WorkingAsIntended,他们建议只捕获异常.但这并没有解决问题.我知道解决它的其他方法,但这不是这个安卓漏洞吗?
更新 错误状态再次"分配".希望很快就能解决.我的临时解决方案是
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
// do your fragment transaction here
}
}, 200);
Run Code Online (Sandbox Code Playgroud) android android-fragments android-dialogfragment android-permissions android-6.0-marshmallow
像这样的方法ActivityCompat.requestPermissions
要求我传递一个请求代码,以后我可以在回调中测试它(在这种情况下onRequestPermissionsResult
).我应该在请求代码中传递一些最佳实践价值吗?我注意到如果我只输入一个随机的,int
我有时会得到这样的错误:
java.lang.IllegalArgumentException: Can only use lower 8 bits for requestCode
10-25 16:47:43.652 8315-8315/? E/AndroidRuntime: FATAL EXCEPTION: main
10-25 16:47:43.652 8315-8315/? E/AndroidRuntime: Process: my package, PID: 8315
10-25 16:47:43.652 8315-8315/? E/AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{mypackage.myactivity}: java.lang.IllegalArgumentException: Can only use lower 8 bits for requestCode
10-25 16:47:43.652 8315-8315/? E/AndroidRuntime: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
10-25 16:47:43.652 8315-8315/? E/AndroidRuntime: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
10-25 16:47:43.652 8315-8315/? E/AndroidRuntime: at android.app.ActivityThread.-wrap11(ActivityThread.java)
10-25 16:47:43.652 8315-8315/? E/AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
10-25 16:47:43.652 8315-8315/? E/AndroidRuntime: at …
Run Code Online (Sandbox Code Playgroud) java user-interface android android-permissions android-6.0-marshmallow