小编Vek*_*r88的帖子

从原始磁盘映像读取文件(2352字节/扇区)

几个月前我已经在这里问了类似的东西,但当然我的更新中使用的解决方案并不好,因为我不知道哪个偏移量启动了我想要的文件,该代码读取整个文件,直到找到所需的字符串那不方便 这就是我搜索用Java编码的ISO9660文件阅读器的原因,我在这个项目中读到了完美的ISO9660文件,但有些文件格式bin 和img 我希望能够打开.

不幸的是,代码不起作用,因为它期望ISO9660标题\x01CD001\x01位于前缀的偏移量(32768,紧接在前16个扇区之后,保留用于其他目的),如此此处标准所定义:

7.前十六个部门是空的

前16个扇区(扇区号0到15,包括0和15)只包含零.ISO9660没有定义这些扇区的内容,但对于DOS,它们显然总是写为零.它们显然保留供可以从CD-ROM引导的系统使用.

在我的情况下,我有imgbin 磁盘映像的\x01CD001\x01标题位于第18扇区结束后的偏移量37656,792字节.这使代码抛出错误.

由于有软件能够 在不需要 或文件的情况下读取bin 和img文件的内容,在这种情况下,使用标头的规则是什么?它是标准还是粗暴地通过字节搜索标题?如果它是一个标准,我在哪里可以找到任何类型的文档/实现?cueccd

更新:我发现这些文件具有不同的扇区大小:2352字节/扇区,因为它们是CD-R的原始副本.

java iso9660

7
推荐指数
1
解决办法
1543
查看次数

在自定义Runnable中使用Retrofit执行请求

我正在使用迁移Volley到自定义实现Retrofit,但我正在尝试向我的实现添加一些Volley我喜欢的功能,例如

RequestQueue.cancel(String tag)

如果Request具有请求的标记,则通过将boolean值设置mCanceled为true来取消它.该run方法检查此值并返回它是否为真.为了能够重现这一点,Retrofit 我应该能够使用我的自定义类Runnable而不是默认类,我有一个mTag和一个mCanceled字段.而且,Volley还能够在活动Threads 内设置这样的标志并立即停止它们.我cancelAll已经实现的方法只是将队列排到另一个队列,但是无法访问活动线程.是否有可能用Retrofit 和获得相同的结果ThreadPoolExecutor

android threadpoolexecutor retrofit

7
推荐指数
2
解决办法
9817
查看次数

使一个IAP对不同的应用程序有效

到目前为止,我通过应用内购买在Play商店中发布我的应用以禁用广告.

我正在重新设计整个应用程序,我想将它分成两个应用程序:一个用于移动设备(如原始设备)和一个用于Android TV设备,因此我考虑将这两个版本作为两个新应用程序发布并转换为实际的应用程序成像购买经理.我希望已付费的用户移除移动版中的广告,以便在电视广告中删除广告.

有一些方法可以检查应用程序是否未从Play商店安装和/或是否已被篡改(例如,使用apktools).

可以将付费应用创建为其他应用的"关键".

我在想创建三个应用程序:

  • PM:采购经理,将取代实际的应用程序
  • MB:我的应用程序的移动版本
  • 电视:我的应用程序的电视版

所有三个应用程序都将使用相同的密钥进行签名,并将包括篡改检测.PM将有一个Activity 可供MB或电视使用的曝光,以检查用户是否购买了"移除广告"功能.

但我有两个问题:

  • 这种设计是安全的还是可以被开发利用?
  • 有没有更优雅的方式(除了上传多个APK)这样做?

编辑1: 我分割我的应用程序有两个主要原因:

  • 我的应用程序目前支持API级别9,通过添加leanback库我应该将最小SDK增加到17级
  • 我不想要一个大的apk同时具有电视和移动版本的图像和布局

security android in-app-billing android-billing

7
推荐指数
1
解决办法
187
查看次数

暂时改变可绘制的颜色

在我正在开发的一个应用程序中,我正在尝试以编程方式创建一个ImageButton所选的副本ImageButton,但图像以不同的方式着色,让我们说是红色.

如果我使用PowerDuff.Mode.MULTIPLY:

clonebutton.getDrawable().setColorFilter(0xFFFF0000,Mode.MULTIPLY);
Run Code Online (Sandbox Code Playgroud)

然后,即使是原版也ImageButton将其颜色变为红色,因为它们共享相同的颜色drawable.有没有办法只在克隆按钮上应用过滤器而不使用两个不同的drawables?例如,有可能在某种程度上将一个着色层放在克隆按钮的顶部而不编辑drawable

更新 我将drawable设置为可变:

Drawable d = swipebutton.getDrawable();
d.mutate();
d.setColorFilter(0xFFFF0000,Mode.MULTIPLY);
swipebutton.setImageDrawable(d);
Run Code Online (Sandbox Code Playgroud)

这可以防止我的clonebutton将其状态共享drawable给其他人views.

java android

6
推荐指数
1
解决办法
2326
查看次数

让Volley的NetworkImageView显示本地图像文件

NetworkImageView 用来显示从远程URL下载的一些封面,我成功地设法缓存并显示它们,但我想让用户设置自己的封面图像,如果他们想要的话.我尝试使用setImageUrl带有Uri.fromFile(mCoverFile).toString()as参数的方法,但它不起作用.由于它是远程和本地图像的混合,我无法切换到常规ImageViews,所以我想知道是否有任何方法可以启用加载本地图像.

我当然知道的ImageViewsetImageBitmap方法,但NetworkImageView会自动调整创建Bitmap,也防止View回收的GridViewS和ListView秒.

更新: njzk2的答案奏效了.要根据您的View大小自动调整位图,只需ImageRequest.doParse从Volley的源代码中复制该方法.

android android-volley networkimageview

6
推荐指数
1
解决办法
1万
查看次数

ViewPager具有多个可见的孩子并且选择更大.

在我的Activity我添加了一个GalleryView 使用戴夫·史密斯的PagerContainer例子,我使用的实例是非常相似的代码PagerActivity 在他的榜样,而我改变了布局,因为我需要使用布局权重:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.example.myapp.PagerContainer
        android:id="@+id/pager_container"
        android:layout_width="match_parent"
        android:overScrollMode="never"
        android:layout_marginTop="5dp"
        android:layout_marginBottom="5dp"
        android:layout_height="0dp"
        android:layout_weight="0.66"
        >
        <android.support.v4.view.ViewPager
            android:layout_width="150dp"
            android:overScrollMode="never"
            android:layout_height="match_parent"
            android:layout_gravity="center" />
    </com.example.myapp.PagerContainer>

    <ImageView
        android:layout_width="150dp"
        android:layout_height="0dp"
        android:layout_weight="0.34"
        android:id="@+id/current_selection_logo"
        android:layout_gravity="center_horizontal"/>

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

现在我的ViewPager 工作正常,看起来像这样(我省略了底部ImageView)

当前的viewpager

但是我想重新调整未选择的项目,旨在强调中心项目(选择),例如:

wanted_viewpager

要么:

wanted_viewpager_min

我已经找到了这个问题的接受答案,但是实现该解决方案意味着我将使选择大于其当前维度(已经是最大可能).

所以我想在编辑instantiateItemPagerAdapter  设置减小的宽度和高度,并在onPageSelected 使用问题中显示的方法.

问题是,我不知道是哪一种LayoutParams ,我应该打电话呼叫getWidth() 和getHeight() 在instantiateItem 收益0.

目前我正在使用:

View v = container.getChildAt(position);
PagerContainer.LayoutParams params = (PagerContainer.LayoutParams)v.getLayoutParams(); …
Run Code Online (Sandbox Code Playgroud)

android android-viewpager

6
推荐指数
2
解决办法
3022
查看次数

水平居中RecyclerView的第一项

我想使用a RecyclerView来模拟a的行为MultiViewPager,特别是我想让所选项目位于屏幕的中心,包括第一个和最后一个元素.

正如您在此图像中看到的那样,第一个项目居中,这将是我的预期结果. 预期结果

我做的是设置一个RecyclerView水平LinearLayoutManager和一个LinearSnapHelper.此解决方案的问题是第一个和最后一个项永远不会作为选择水平居中.我应该切换我的代码,以便它使用a MultiViewPager或是否有可能获得类似的结果利用RecyclerView

android android-recyclerview linearlayoutmanager

6
推荐指数
2
解决办法
6054
查看次数

LinearSnapHelper不会捕捉RecyclerView的边缘项目

这是我上一个问题的后续行动.

在我的应用程序中,我正在尝试使用水平RecyclerView自动捕捉到中心项目.为此,我附上了LinearSnapHelper它.我还创建了一个项目装饰,为第一个/最后一个元素添加了一些左/右填充:

public class OffsetItemDecoration extends RecyclerView.ItemDecoration {

    private Context ctx;

    public OffsetItemDecoration(Context ctx){
        this.ctx = ctx;
    }

    @Override
    public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
        super.getItemOffsets(outRect, view, parent, state);
        int nCols = ActivityUtils.getNumCols(ctx);
        int colWidth = (int)(getScreenWidth()/(float)(nCols));

        if(parent.getChildAdapterPosition(view) == 0){
            int offset = Math.round(getScreenWidth() / 2f - colWidth / 2f);
            setupOutRect(outRect, offset, true);
        }

        else if (parent.getChildAdapterPosition(view) == state.getItemCount()-1){
            int offset = Math.round(getScreenWidth() / 2f - colWidth / 2f); …
Run Code Online (Sandbox Code Playgroud)

android android-layout android-recyclerview

6
推荐指数
1
解决办法
2246
查看次数

检测是否已选择输入法

在我的应用程序中,我需要让用户选择一个输入法.一旦它被选中,我应该执行一些任务.如何检测到用户实际选择了InputMethod

这是用于显示InputMethod列表的代码.

InputMethodManager imeManager = (InputMethodManager) mw.getApplicationContext().getSystemService(Context.INPUT_METHOD_SERVICE);
if (imeManager != null) {
    imeManager.showInputMethodPicker();
} else {
    Toast.makeText(mw.getApplicationContext(), "IME ERROR",
    Toast.LENGTH_LONG).show();
}
Run Code Online (Sandbox Code Playgroud)

android android-input-method

5
推荐指数
2
解决办法
2810
查看次数

检查 Node.js Rest API 上的资源所有权

我正在尝试使用express 和mongoose 开发Node.js 后端。

网络上有很多关于如何实现正确的身份验证层的示例,但我找不到任何关于如何正确实现授权层的示例。

在我的具体情况下,我正在创建多用户应用程序的后端,我希望每个用户只能看到他/她自己插入的数据。

我有三个模型:

  1. 用户
  2. 类别
  3. 文档

用户拥有一个或多个类别类别包含零个或多个文档

CRUD 操作在以下端点上实现:

/user/:userid
/user/:userid/category
/user/:userid/category/:categoryid
/user/:userid/category/:categoryid/document
/user/:userid/category/:categoryid/document/:documentid
Run Code Online (Sandbox Code Playgroud)

在身份验证部分,我为每个请求设置了当前登录的用户 ID,这样我就可以轻松检查

jsonwebtoken.userId == req.params.userid
Run Code Online (Sandbox Code Playgroud)

否则返回403错误。

检查类别的所有权非常容易,因为每个类别都包含对创建它们的用户的引用。

var CategorySchema = mongoose.Schema({
    name: {
        type: String,
        required: true,
        trim: true
    },
    user_id: {
        type: mongoose.Schema.Types.ObjectId,
        ref: 'User',
        index: true
    }
});
Run Code Online (Sandbox Code Playgroud)

然而,在文档模型中,我只有对其所属类别的引用,但没有添加对用户的引用。

因此,我想知道如何处理“嵌套”关系。我是否需要user_id在任何深度级别添加对所有这些内容的引用?有没有最佳实践?

此外,这是做我需要的事情的正确方法吗?或者是否有任何官方/成熟的库已经做同样的事情?

rest mongoose node.js express

5
推荐指数
1
解决办法
1949
查看次数