以编程方式移动数据和GPS开/关 - Android也高于5.0

时间:2016-11-29 09:06:20

标签: android gps 3g 4g

我想实施Enable/Disable mobile data and GPS settings。 我搜索了启用/禁用移动数据和GPS设置的可用Android API,以下是我的发现。

启用/停用移动数据 - 1.可以在< 5.0 Android OS中执行启用/禁用。 2.从5.0以上的Android操作系统,非系统应用程序尚无法启用/禁用移动数据。               从5.0或更高版本开始,我们在执行此操作时会遇到此异常 - 这不是第三方应用程序使用的。 原因是:java.lang.SecurityException: Neither user 10314 nor current process has android.permission.MODIFY_PHONE_STATE

是否有可用/可用的解决方案?

GPS设置 - 1.我们能够以编程方式在位置上但尚未找到禁用它的方法(不包括Intent方法)。

任何人都知道如何在不通过意图移动到设置的情况下禁用GPS(以编程方式定位)。

先谢谢。

2 个答案:

答案 0 :(得分:1)

我们正在更改GPS设置,而不使用 SettingsApi

移至设置屏幕

要检查GPS是开启还是关闭,您必须检查如下,

# -*- coding: utf-8 -*- 

'''
한국어 형태 분석된 자료를 word2Vec모델로 만드는 모듈
입력은 형태분석된 파일을 취함
한 줄에 한 문장씩
출력으로 model을 형성  
'''

import codecs
import gensim
import multiprocessing
import word2vec

import sys
reload(sys)
sys.setdefaultencoding('utf8')

# 모델 configuration 설정 
config = {
   'min_count': 15,  # 등장 횟수가 15 이하인 단어는 무시
   'size': 300,  # 300차원짜리 벡터스페이스에 embedding
   'sg': 1,  # 0이면 CBOW, 1이면 skip-gram
    'batch_words': 10000,  # 사전을 구축할때 한번에 읽을 단어 수
    'iter': 10,  # 보통 딥러닝에서 말하는 epoch과 비슷한, 반복 횟수
    'workers': multiprocessing.cpu_count(),
}

modelTwitterNoStop = gensim.models.Word2Vec(**config)

class SentenceReader:

    def __init__(self, filepath):
        self.filepath = filepath


    def __iter__(self):
         for line in codecs.open(self.filepath, encoding='utf-8'):
             yield line.split(' ')

# 사전과 학습을 형태분석된 파일을 가지고 행함
sentences_vocab = SentenceReader('corpusAllNewsNoTagNoStop.txt')
sentences_train = SentenceReader('corpusAllNewsNoTagNoStop.txt')

#model = gensim.models.Word2Vec()
modelTwitterNoStop.build_vocab(sentences_vocab)
modelTwitterNoStop.train(sentences_train)

#이렇게 학습된 모델을 저장
modelTwitterNoStop.save('modelTwitterNoStop')


### 모델 테스트 ##########
#다음 라인부터는 분리하여 별도로 Test모델 프로그램을 만들어 다양한 관계를 실험해 볼 수 있음

import codecs
import gensim
import multiprocessing

import sys
reload(sys)
sys.setdefaultencoding('utf8')

##도 포함


#만들어 놓은 gensim 모델을 로딩
modelTwitterNoStop = gensim.models.Word2Vec.load('modelTwitterNoStop')


#most similar Test - 상위 10개의 유사한 벡터를 찾음.. 실제로 '일본'이 가장 높은    것으로 나
print ' '.join(["{}-{}".format(word, value) for word, value in 
(modelTwitterNoStop.most_similar(positive=[u"한국", u"도쿄"], negative=[u"서    울"], topn=10))])

print "\n"

# positive만 사용해서도 할 수 있으며 cosmul을 이용
print ' '.join(["{}-{}".format(word, value) for word, value in 
(modelTwitterNoStop.most_similar_cosmul(positive=[u"비선", u"최순실"], topn=20))])
print "\n"

#doesn't match Test
print modelTwitterNoStop.doesnt_match(u"정윤회 김종 박근혜 최순실".split())

print "\n"

#similarity Test
print modelTwitterNoStop.similarity(u"비선", u"정윤회")
print "\n"

# no.of vocab.. in this model
print modelTwitterNoStop
print "\n"

}

以下是Documentation

答案 1 :(得分:0)

这是如何从GPS和网络(Wi-Fi /数据)提供商启动定位服务。

LocationManager locationManager = (LocationManager)getContext().getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0,locationListener);        
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,0,0,locationListener);

如果您想停止侦听位置更新,请运行以下代码: locationManager.removeUpdates(locationListener);

单行代码将停止侦听任何位置更新,无论提供商(GPS /网络)如何,因为LocationManager不关心更新的来源。

在您的情况下,我假设您知道如何创建一些UI以让用户决定是否使用GPS /网络。然后,你可以这样做:

if ( useGPS ) {
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0,locationListener);
}
if ( useNetwork ) {
    locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,0,0,locationListener);
}

如果用户启用了两个提供商,则位置更新可能更准确。如果用户禁用了两个提供程序,则无关紧要。由于LocationListener没有更新,因此它应该是用户想要的。

顺便说一句,这是创建LocationListener的代码:

LocationListener locationListener =  new LocationListener() {
        @Override
        public void onLocationChanged(Location location) {
            // you may add some logic here to determine whether the new location update is more accurate than the previous one
            if ( isBetterLocation(location,currentBestLocation) ) {
                currentBestLocation = location;
            }
        }

        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {
        }

        @Override
        public void onProviderEnabled(String provider) {
        }

        @Override
        public void onProviderDisabled(String provider) {
        }
    };