我正在开发一个用于检查互联网连接的Android广播接收器.
问题是我的广播接收器被调用了两次.我希望它只在网络可用时才被调用.如果它不可用,我不希望得到通知.
这是广播接收器
public class NetworkChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(final Context context, final Intent intent) {
final ConnectivityManager connMgr = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
final android.net.NetworkInfo wifi = connMgr
.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
final android.net.NetworkInfo mobile = connMgr
.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
if (wifi.isAvailable() || mobile.isAvailable()) {
// Do something
Log.d("Network Available ", "Flag No 1");
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是manifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.broadcastreceiverforinternetconnection"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<receiver android:name=".NetworkChangeReceiver" >
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" …Run Code Online (Sandbox Code Playgroud) java android broadcastreceiver android-networking android-wifi
我在我的Android应用程序中使用谷歌地图.我已经创建了密钥并在清单文件中添加了必要的权限.但很快我启动应用程序,我在调试器中收到此消息:
GoogleService初始化失败,状态:10,缺少预期资源:'R.string.google_app_id'用于初始化Google服务.可能的原因是缺少google-services.json或com.google.gms.google-services gradle插件.
我不确定什么是错的.地图工作正常,我可以毫无问题地使用它.我的gradle文件有这个条目:
编译'com.google.android.gms:play-services:8.4.0'
什么是抱怨,我该如何缓解它?
对于提示用户转到设置页面并启用位置服务并再次返回的传统方法,我注意到在一些最新的应用程序中执行相同操作的更简单方法.
参考下面的截图,它会提示一个对话框,用户只需点击一下鼠标,使定位服务,它在这些应用程序的工作原理.
我怎样才能实现同样的目标?
是否有API以编程方式打开/关闭Android上的WiFi HotSpot?
我应该用什么方法打开/关闭它?
更新:有这个选项可以启用HotSpot,只需打开/关闭WiFi,但这对我来说不是一个好的解决方案.
我的应用程序的一部分需要位置服务,因此如果当前关闭位置,应用程序将提示用户启用它.下面是我正在做它:(也见于这个堆栈溢出的答案)
LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder()
.addLocationRequest(mLocationRequest);
builder.setAlwaysShow(true);
PendingResult<LocationSettingsResult> result = LocationServices.SettingsApi.checkLocationSettings(mGoogleApiClient, builder.build());
result.setResultCallback(new ResultCallback<LocationSettingsResult>()
{
@Override
public void onResult(LocationSettingsResult result)
{
final Status status = result.getStatus();
final LocationSettingsStates = result.getLocationSettingsStates();
switch (status.getStatusCode())
{
case LocationSettingsStatusCodes.SUCCESS:
// All location settings are satisfied. The client can initialize location
// requests here.
...
Log.d("onResult", "SUCCESS");
break;
case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
// Location settings are not satisfied. But could be fixed by showing the user
// a dialog.
Log.d("onResult", "RESOLUTION_REQUIRED");
try …Run Code Online (Sandbox Code Playgroud) 我正在研究与地图相关的android应用程序,我需要在客户端开发中检查位置访问是否启用,如果未启用位置服务则显示对话框提示.
如何在android中以编程方式启用"位置访问"?
在我们的应用程序中,我们想要集成Android默认GPS对话框.GPS关闭时出现的同一个对话框,我们在谷歌地图应用程序中按下我的位置按钮.还附上了我要整合的对话框的图像.
对话框出现在OLA app下面(ANDROID L):

为OLA应用程序显示对话框(ANDROID KIT_KAT):

对话框出现在谷歌地图下面(ANDROID L):

我们现有的实施方案是当GPS关闭时,我们将应用程序重定向到设备的默认位置设置屏幕,他/她可以从该位置打开位置.
期待着答案.提前致谢.
已解决 - 最后回答
我正在使用新方法从Google Play Services 7.0中检索位置:
http://android-developers.blogspot.com/2015/03/google-play-services-70-places-everyone.html https://developer.android.com/reference/com/google/android/gms/location /SettingsApi.html
一开始,它只给我们两个选项,"取消"和"开启"(下图).

但是今天我看到了新的Google Play服务更新"功能" - 当我的位置关闭并尝试通过Google Play服务获取时,弹出的对话框为我提供了选项:

是的,永远不会.当我点击它时,我的应用程序将永远不会通过Google Play服务获取位置,即使它已启用,我没有其他选择,只能重新安装应用程序或清除所有数据,Google没有其他选项可以更改选择的选项.
我该如何处理这种情况?如果没有删除应用程序中的所有数据,有没有办法在选择"never"选项后进行更改?
编辑:
我在这里找到了解决方案:如何显示Google地图等启用位置对话框?
我们需要添加到我们的构建器方法setAlwaysShow(boolean show)
LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder()
.addLocationRequest(mLocationRequestBalancedPowerAccuracy);
builder.setAlwaysShow(true);
Run Code Online (Sandbox Code Playgroud)
之后我们只有两个选项 - "是"和"否".
private void turnGPSOn(){
String provider = Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
if(!provider.contains("gps")){ //if gps is disabled
final Intent poke = new Intent();
poke.setClassName("com.android.settings", "com.android.settings.widget.SettingsAppWidgetProvider");
poke.addCategory(Intent.CATEGORY_ALTERNATIVE);
poke.setData(Uri.parse("3"));
sendBroadcast(poke);
}
}
Run Code Online (Sandbox Code Playgroud)
看到Logcat
04/20 17:35:26: Launching app
$ adb push F:\AndroidProject\Picker\app\build\outputs\apk\app-debug.apk /data/local/tmp/picker.novasyslabs.com.picker
$ adb shell pm install -r "/data/local/tmp/picker.novasyslabs.com.picker"
pkg: /data/local/tmp/picker.novasyslabs.com.picker
Success
$ adb shell am start -n "picker.novasyslabs.com.picker/picker.novasyslabs.com.picker.SlashScreen" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER
Connected to process 22502 on device sony-d2302-ZH80065A89
W/ResourceType: Found multiple library tables, ignoring...
W/ResourceType: Found multiple library tables, ignoring...
W/ResourceType: Found multiple library …Run Code Online (Sandbox Code Playgroud) 从谷歌i/o 2015我了解到谷歌播放服务中有一个新的对话框,用户不需要退出当前的应用程序来打开位置.下面的图片显示了它的样子:

现在我的问题是,我如何在我的项目中实现这一点?我搜索过但没有找到任何有效的答案,请帮忙!
android ×11
gps ×4
android-wifi ×2
location ×2
action ×1
android-gps ×1
dialog ×1
google-maps ×1
java ×1
wifi ×1