小编ErG*_*404的帖子

通过Android上的Intent选择任何类型的文件

我想为可以返回任何类型文件的应用启动intentchooser

目前我使用(我从Android电子邮件源代码中复制了文件附件)

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("*/*");
Intent i = Intent.createChooser(intent, "File");
startActivityForResult(i, CHOOSE_FILE_REQUESTCODE);
Run Code Online (Sandbox Code Playgroud)

但它只在我的Galaxy S2上显示"画廊"和"音乐播放器".此设备上有一个文件浏览器,我希望它出现在列表中.我还希望相机应用程序显示在列表中,以便用户可以拍摄照片并通过我的应用程序发送.如果我安装Astro文件管理器,它也会响应这个意图.我的客户只是Galaxy SII所有者,我不想强​​迫他们安装Astro文件管理器,因为他们已经拥有一个基本但足够的文件管理器.

知道如何实现这一目标吗?我很确定我已经看到默认文件管理器出现在这样的菜单中以选择文件,但我不记得在哪个应用程序中.

android file intentfilter android-intent

85
推荐指数
4
解决办法
10万
查看次数

通过ADB以root身份启动脚本

我已经创建了一个脚本来安装分区并在我的Android系统中执行一些操作.我将脚本保存为Android的/ bin文件夹中的install.sh.

我想从ADB调用脚本,它本身是从Windows上的批处理文件调用的,但它需要以root身份执行.

我尝试的第一个解决方案是使用调用脚本

adb shell "su -c sh /bin/script.sh"
Run Code Online (Sandbox Code Playgroud)

但它不起作用,因为它给我一个shell访问权限(具有root权限),但没有执行任何操作.我也试着打电话

adb root "sh /bin/script.sh"
Run Code Online (Sandbox Code Playgroud)

但我得到以下错误

adbd cannot run as root in production builds
Run Code Online (Sandbox Code Playgroud)

然后我试着写

su -c "command"
Run Code Online (Sandbox Code Playgroud)

对于我的脚本中需要root访问权限的所有命令,但我遇到了同样的问题.当我运行脚本时,我只获得了一个root shell,并且没有执行任何操作.

如果我手动使用第一个解决方案(例如我调用adb shell su,然后是我的脚本),它就可以了.但是,重点是自动化该过程,以便可以从另一个脚本调用adb shell.

你知道我怎么能做到这一点吗?

谢谢 !

shell android root adb

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

在改造 2 和 Gson 中作为请求主体的通用对象列表

作为我的应用程序全局重构的一部分,我第一次尝试改造 2。

我的应用程序存储从传感器读取的不同国王的数据。每个度量都有共同的特征,所以我为我需要的每种数据创建了一个父度量类(它不是抽象的)和几个子类。例如,我创建了一个 TemperatureMeasure 子类。

我有权访问一个公共 API,我无法更改该 API 以发送我在我的应用程序中收集的度量。

使用改造(2.0 beta),我用这个方法声明了一个接口:

@POST("/bdd/measure/send/{measureType}/{sensorId}")
Call<APIResponse> sendFludiaRaw(@Path("site") String siteId, @Path("measureType") String measureType, @Path("sensor") String sensorId, @Body List<? extends Measure> measures);
Run Code Online (Sandbox Code Playgroud)

我的计划是能够通过提供扩展 Measure 类的对象列表来调用此方法。我使用 Gson 转换器作为串行器。当我调用这个方法时——例如使用一个 TemperatureMeasure 对象列表——创建的 JSON 对象只包含 Measure 类的成员,但没有来自 TemperatureMeasure 成员的任何内容。

解决此问题的最佳解决方案是什么?

根据我一直在阅读的内容,一种选择是实现串行器/解串器并将其提供给 Gson 转换器。当遇到 Measure 对象时,该序列化程序会自动尝试序列化正确的子类。另一种选择是使用 Gson 自己处理序列化,并将原始 JSON 数据作为字符串提供给改造调用,但这会破坏使用改造的好处。我发现的最后一个选项是在我的改造界面中为每种度量创建一个请求。

是否有更好的通用友好选项可以阻止我在某处编写巨大的 switch 语句?

谢谢

android gson retrofit2

5
推荐指数
0
解决办法
946
查看次数

似乎没有调用onContextItemSelected

我正在基于列表视图创建一个非常简单的Activity.我想为列表中的每个项目添加一个上下文菜单,所以我打电话给registerForContextMenu(mListView).然后我实现了方法onCreateContextMenuonContextItemSelected.

onCreateContextMenu作品(上下文菜单中显示正确),但是当我点击该菜单没有任何反应的项目,在上下文菜单中刚好消失,并且该方法onContextItemSelected不叫(我只是把日志里面检查).

如果它可以帮助,请注意它ListViewonItemClickListener附加了它.

我忘记了什么吗?

谢谢 !

编辑:这是代码(我隐藏了一些不相关的东西)

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    mListView = new ListView(this);
    mContacts = new Vector<Contact>();
    mAdapter = new ContactAdapter(this, mContacts);
    registerForContextMenu(mListView);
    mListView.setAdapter(mAdapter);
    mListView.setOnItemClickListener(new OnItemClickListener() {
    ... };
}


@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    if (v == mListView) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.list_item_contextmenu, menu);
    }        
}

@Override
public boolean onContextItemSelected(MenuItem item) …
Run Code Online (Sandbox Code Playgroud)

android listview contextmenu

3
推荐指数
1
解决办法
5058
查看次数

误解的Java泛型

我在代码中面临一个令人困惑的问题。

我有一种方法是签名

public <T extends Measure> void sendNewMeasure(Class<T> type, T measure);
Run Code Online (Sandbox Code Playgroud)

在另一个类中,我有此方法,该方法调用上一个方法:

public <T extends Measure> void onNewMeasure(NewMeasureEvent<T> event) {
    T measure = event.getMeasure();

    APIInterface.getInstance().sendNewMeasure(measure.getClass(), measure);
}
Run Code Online (Sandbox Code Playgroud)

我得到的错误是Wrong argument type, found 'T', required <? extends com.blablabla.Measure>但我不明白为什么,因为测量对象的类型为T,扩展了Measure。

有什么办法可以解决此问题,最重要的是,为什么它不起作用?

谢谢 !

编辑:

这是sendNewMeasure方法的实现:

public <T extends Measure> void sendNewMeasure(Class<T> type, T measure) {
    String measureType = measure.getJSONMeasureTypeName();

    List<T> measures = T.find(type, measure.timestamp, true, false);

    measures.add(measure);
    sendMeasures(siteId, sensorId, measureType, measures);
}
Run Code Online (Sandbox Code Playgroud)

编辑2:这是find方法签名,我无法更改:

public static <T> List<T> find(Class<T> type, int timestamp, boolean …
Run Code Online (Sandbox Code Playgroud)

java generics

3
推荐指数
1
解决办法
1287
查看次数