我正在使用MediaScanner扫描文件。但是API 28和29也不起作用。
context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, file));
我使用了Broadcast,但是它的工作方式不同。因为它已“弃用”。
public static class FilesScanner extends ContextWrapper implements MediaScannerConnection.MediaScannerConnectionClient{
private MediaScannerConnection connection = null;
private String SCAN_FILE_PATH = "";
private String SCAN_FILE_MIME_TYPE = "*/*";
public static FilesScanner with(Context context, String SCAN_FILE_PATH){ return new FilesScanner(context, SCAN_FILE_PATH, "*/*"); }
public static FilesScanner with(Context context, String SCAN_FILE_PATH, String SCAN_FILE_MIME_TYPE){ return new FilesScanner(context, SCAN_FILE_PATH, SCAN_FILE_MIME_TYPE); }
private FilesScanner(Context context, String SCAN_FILE_PATH, String SCAN_FILE_MIME_TYPE){
super(context);
this.SCAN_FILE_PATH = SCAN_FILE_PATH;
if (SCAN_FILE_PATH == null){
this.SCAN_FILE_PATH = FilePaths.ROOT_DIR;
}
this.SCAN_FILE_MIME_TYPE = SCAN_FILE_MIME_TYPE;
if (SCAN_FILE_MIME_TYPE == null){
this.SCAN_FILE_MIME_TYPE = "*/*";
}
connection = new MediaScannerConnection(this, this);
connection.connect();
}
@Override
public void onMediaScannerConnected() {
MyLog.d("onMediaScannerConnected");
connection.scanFile(SCAN_FILE_PATH, SCAN_FILE_MIME_TYPE);
}
@Override
public void onScanCompleted(String path, Uri uri) {
MyLog.d("onScanCompleted" + " URI : " + uri.getPath());
connection.disconnect();
}
}
FilesScanner.with(this, path, "image/*");
答案 0 :(得分:2)
您将其添加到清单文件了吗?
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${app_package_name}.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
答案 1 :(得分:0)
从Android 9( API级别28 )开始, NETWORK_STATE_CHANGED_ACTION 广播不会接收到有关用户位置或个人身份数据的信息。
此外,如果您的应用安装在运行 Android 9或更高版本的设备上,则来自Wi-Fi的系统广播不包含SSID,BSSID,连接信息或扫描结果。要获取此信息,请致电 getConnectionInfo()
有关更多信息,请使用以下文档链接:https://developer.android.com/guide/components/broadcasts
答案 2 :(得分:0)
您是否在FileProvider
中定义了AndroidManifest.xml
条目?
您需要指定<files-path>
,以使其可用于其他应用。
答案 3 :(得分:0)
import React, { Component } from "react";
import { render } from "react-dom";
import ReactDOM from "react-dom";
import "./style.css";
class App extends Component {
constructor(props) {
super(props);
this.state = {
padding: 0
};
}
componentDidMount() {
const el = this.divElement;
const style = window.getComputedStyle(el);
const padding = style.getPropertyValue("padding").match(/\d+/);;
this.setState({ padding });
}
render() {
return (
<table>
<tr>
<td>
<a
ref={divElement => {
this.divElement = divElement;
}}
href="google.com"
style={{margin: this.state.padding* -1 }}>
link padding: <b>{this.state.padding}px</b>
</a>
</td>
</tr>
</table>
);
}
}
ReactDOM.render(<App />, document.getElementById("root"));