1

Android タブレットで開発中の GPS アプリケーションをテストしたいので、DDMS を使用してロードしている KML ファイルからなりすましの場所をアプリケーションに送信する必要があります。エミュレーターではなく、物理デバイスを使用したい。

問題は、デバイス ビューで外部デバイス (実行中のアプリ プロセス) を選択すると、DDMS の Emulator Control セクションが無効 (グレー表示) になることです。エミュレーターを選択すると、エミュレーター コントロールが有効に表示されますが、物理デバイスでは表示されません。

私のアプリケーションには

<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />

そして、私の物理タブレットは次のように構成されています。

  • USBデバッグ。
  • モックの場所を許可する

SDK r20 を使用しており、タブレットには Android 4.0.3 が搭載されています。

何か案は?

どうもありがとうございました

4

2 に答える 2

2

この問題の解決策をまとめました。

  • [設定] - > [アプリケーション] -> [開発]に移動し、[モックの場所を許可する]を選択します。

  • AndroidManifest.xml にACCESS_MOCK_LOCATION権限を追加します。

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android">
    
    <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION">
    
  • LocationManager .addTestProvider() 関数を使用するクラスを実装します。これは、ファイルからのデータを使用して新しい Location オブジェクトを構築する必要があることをアプリケーションに示します。

  • LocationManager.setTestProviderLocation() 関数を使用して、新しい場所を作成できます。

    // start using mock locations
    try {
       mockLocationCreator = new MockLocationCreator(this.getApplicationContext());
       try {
           mockLocationCreator.openLocationList();
    
           mockLocationThread = new Thread(mockLocationCreator);
           mockLocationThread.start();
    
           Toast.makeText(this.getApplicationContext(), 
                          "Mock locations are in use", 
                          Toast.LENGTH_LONG)
                .show();
    
       } catch (IOException e) {
           Toast.makeText(this.getApplicationContext(), 
                          "Error: Unable to open / read data file", 
                          Toast.LENGTH_LONG)
                .show();
           mockLocationCreator = null;
       }
    } catch(SecurityException e) {
       Toast.makeText(this.getApplicationContext(), 
                      "Error: Insufficient Privileges", 
                       Toast.LENGTH_LONG)
            .show();
       Log.e(TAG, "unable to use mock locations, insufficient privileges", e);
    }
    

注:ここで誤って提案されているように、デバイスまたはマニフェストのアクセス許可に関係なく、DDMS -> Emulator Control -> Location Controls からモックの場所を実際のデバイスに送信することはできません。


ソース:

デバイス上の Android モックの場所? - telnet コマンド ライン、リンク、コード スニペットを使用したマニフェスト アクセス許可と代替ソリューションに関する情報。

Using Mock Locations in Android - より冗長で、いくつかのリンク切れが含まれています。

LocationManager ドキュメント- Android の公式ドキュメント

于 2012-07-21T11:37:28.527 に答える
0

簡単に言えば、この無料版spoofingを使用できますが、質問で言ったように、ファイルからの場所が必要な場合は、プロ版を購入する必要がありますspoofKML

于 2012-07-21T10:34:19.190 に答える