私は一日中検索しますが、答えが見つかりません...
すべて準備ができていますが、Googleマップはまだタブでフラグメントに表示できません
GoogleマップAndroid v2および正しいAPI_KEYを既にオンにしていることを確認します
何が起こったのかわかりません!
MainActivity.Java:
public class MainActivity extends FragmentActivity implements
ActionBar.TabListener {
SectionsPagerAdapter mSectionsPagerAdapter;
ViewPager mViewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String titles[] = { this.getString(R.string.title_around),
this.getString(R.string.title_map),
this.getString(R.string.title_favorite),
this.getString(R.string.title_achievement), };
final ActionBar actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
mSectionsPagerAdapter = new SectionsPagerAdapter(
getSupportFragmentManager());
mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setAdapter(mSectionsPagerAdapter);
mViewPager
.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
actionBar.setSelectedNavigationItem(position);
}
});
for (int i = 0; i < titles.length; i++) {
actionBar.addTab(actionBar.newTab().setText(titles[i])
.setTabListener(this));
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction fragmentTransaction) {
mViewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(ActionBar.Tab tab,
FragmentTransaction fragmentTransaction) {
}
@Override
public void onTabReselected(ActionBar.Tab tab,
FragmentTransaction fragmentTransaction) {
}
public class SectionsPagerAdapter extends FragmentPagerAdapter {
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
// TODO 在這邊決定哪個位置要給什麼 View(Fragment)
Fragment fragment = null;
// TODO 建議先在之前就初始化好 4 個 Fragment
switch (position) {
case 0:
fragment = new AroundFragment();
break;
case 1:
fragment = new MapsFragment();
break;
case 2:
fragment = new FavoriteFragment();
break;
case 3:
fragment = new AchievementFragment();
break;
default:
break;
}
return fragment;
}
@Override
public int getCount() {
return 4;
}
@Override
public CharSequence getPageTitle(int position) {
// TODO 在這邊決定每一個 View 的 title
switch (position) {
case 0:
return getString(R.string.title_around);
case 1:
return getString(R.string.title_map);
case 2:
return getString(R.string.title_favorite);
case 3:
return getString(R.string.title_achievement);
}
return null;
}
}
}
MapsFragment.Java:
public class MapsFragment extends Fragment{
static final LatLng NKUT = new LatLng(23.979548, 120.696745);
private GoogleMap map;
SupportMapFragment mMapFragment;
public MapsFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.map_fragment,container, false);
map = ((SupportMapFragment)getFragmentManager().findFragmentById(R.id.map)).getMap();
mMapFragment = SupportMapFragment.newInstance();
FragmentTransaction fragmentTransaction =
getFragmentManager().beginTransaction();
fragmentTransaction.add(R.id.map,mMapFragment);
fragmentTransaction.commit();
return rootView;
}
}
Map_fragment.xml
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
tools:context=".MainActivity" >
<fragment
Android:id="@+id/map"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
class="com.google.Android.gms.maps.SupportMapFragment" />
</RelativeLayout>
Manifest.xml:
<!-- Google Map -->
<permission
Android:name="com.jertt.yummymap.permission.MAPS_RECEIVE"
Android:protectionLevel="signature"/>
<uses-permission Android:name="com.jertt.yummymap.permission.MAPS_RECEIVE"/>
<uses-permission Android:name="Android.permission.INTERNET"/>
<uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission Android:name="com.google.Android.providers.gsf.permission.READ_GSERVICES"/>
<!-- The following two permissions are not required to use
Google Maps Android API v2, but are recommended. -->
<uses-permission Android:name="Android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission Android:name="Android.permission.ACCESS_FINE_LOCATION"/>
<!-- end -->
<!-- Google Map API Key -->
<meta-data
Android:name="com.google.Android.maps.v2.API_KEY"
Android:value="key" />
<!-- end -->
溶液:
私は解決策を見つけました!!!
プライベートキーストアを使用してAPI_KEYを適用する場合。 Eclipseを使用してアプリケーションをアップロードおよびインストールすることはできません。
自分で.apkファイルをデバイスにアップロードしてインストールする必要があります!
Tarsemとsrikanth grに感謝します!!
googleから取得したAPI_KEY
に問題があるようですAPI Accessですので、API_KEY
を確認してください証明書の指紋およびパッケージ名
<manifest>
内でもこれを使用します
<uses-feature
Android:glEsVersion="0x00020000"
Android:required="true" >
</uses-feature>
確認:<meta-data .... >
は<application>
タグ内にある必要があります
PS。
1。また、次のパーミッションを追加してみてください
<uses-permission Android:name="com.google.Android.providers.gsf.permission.READ_GSERVICES"/>
2。After changing API key
in AndroidManifest.xml
MustClear Application Data
アプリケーションデータをクリアするには:
いずれかSettings>Application Manager>Select Your Application > Click on Clear Data
に移動
OrMust Uninstall The Application
の前にinstalling it !
注ドン'Re-install
を行うためにCompletely Uninstall the Application
しない限り、clear its Data completely
私は非常に多くの時間を費やしました、同様の質問が多すぎます。
WIFI_STATEパーミッションを追加しようとしましたが、実際の問題はアプリケーションデータにありました。
マニフェストでAPIキーを変更した後、[〜#〜] must [〜#〜]アプリケーションの「データを消去」(または完全に再インストール)します。
これは私を助け、この投稿が誰かを助けることを願っています。
私の問題は、マニフェストに許可を追加することで解決しました。
<uses-permission Android:name="com.google.Android.providers.gsf.permission.READ_GSERVICES"/>
私は同じ問題を抱えており、私の問題はコンソールでサービスを有効にしていないことでした:
Authに問題がある場合は、Logcatでパッケージ名を確認してください。 Android Studioを使用する場合は、build.gradleを確認してください。ファイルにapplicationIdSuffix '.dev'
が含まれている場合。パッケージ名に.dev
を追加する必要があります。
e.i.パッケージ名は次のとおりです。
com.company.main
APIコンソールでの書き込み
... 9S.ME.DA.FE; com.company.main.dev
マニフェストの確認、権限の追加、Eclipseのsha1での新しいキーの作成など、人々が言ったことをすべて実行した後、まだ機能していません。
adb uninstall com.example.hellomap
その後、Eclipseを再度実行します。デバイスが完全に新しいデータを取得していないように見えました。お役に立てれば。
デバッグキーを使用して、Eclipseからロードできました。私のAndroidManifest.xml
uses-permission Android:name="com.google.Android.providers.gsf.permission.READ_GSERVICES"
Android Studioでも同じ問題に直面していました。 Androidデバッガーに接続すると、Googleマップは表示されません。
~/.Android/debug.keystore
にあるデバッグキーストアのSHA1フィンガープリントを追加して修正しました。このキーストアはデフォルトで生成されると思います(確かではありません)。
Terminalの次のコマンドは、SHA1フィンガープリントを取得するために機能しました。
keytool -list -v -keystore ~/.Android/debug.keystore
パスワードを求められたら、Enterキーを押すだけで何も入力しないでください。 (私の場合は働いた)
開発者コンソールでAndroidアプリケーションのAPIキーにこのフィンガープリントを追加します。
乾杯!
マニフェストで許可を与えることで問題を修正しました
<uses-permission Android:name="com.google.Android.providers.gsf.permission.READ_GSERVICES"/>
多くのケースをレビューし、マップを正常に実行した後、これらのことを念頭に置くことが重要です。
Google Maps API v2(Google Maps Android API v2)ではない)を含む多くのサービスを構成しましたが、競合していました。不要なサービスを削除し、マニフェスト、クリーンインストール、デバイスにマップが表示されました。
Android Studio
を使用しているときにも、同じ問題に直面しました。
すべてのソリューションを紹介しましたが、まだ機能していませんでした。
問題は、最初のプロジェクトのセットアップ後にchanged
my package name
を持っていることでした。パッケージ名の変更はManifest
に反映されていましたが、build.gradle
ファイルには古いパッケージ名がありました。
Build.gradleにchanged package name
があるとすぐに、Mapが機能し始めます。
それが誰かを助けることを願っています。
これらの多くは私を助けましたが、主な問題は、正しい署名がなかったことです。私はXamarinを使用しているため、IDEに組み込まれていないため、keytoolを使用してキーを生成する場合、アプリケーションには決して入りません。 .csprojファイルに次を追加する必要がありました。
<PropertyGroup>
<AndroidKeyStore>True</AndroidKeyStore>
<AndroidSigningKeyStore>maps.keystore</AndroidSigningKeyStore>
<AndroidSigningStorePass>Android</AndroidSigningStorePass>
<AndroidSigningKeyAlias>androiddebugkey</AndroidSigningKeyAlias>
<AndroidSigningKeyPass>Android</AndroidSigningKeyPass>
</PropertyGroup>
私は同じ問題に直面していました。私はいくつかの解決策を試しました-私のために働くものはありませんでした。私のために働いたのは、新しいAPIキーとGoogleプレイサービスのデータをクリアするをデバイス上で生成することでした。
私がこれまでに行った最も奇妙な間違いは、debug.keystoreからSHA1コードを取得することでした。
パスワードはありませんが、パスワードはAndroidでした
それが誰かを助けるかどうかはわかりませんが、私を助けました。さらに、完全なパッケージ名を使用すると、Javaソースコードファイルで見つけることができます。たとえば、私のものがあります。com.example.erikas.mapsdemo( :パッケージcom.example.erikas.mapsdemo;)
したがって、APIキーを取得しようとするときは、次のような入力を使用します。
XX:XX:XX:XX:XX:17:C9:22:BB:BD:7C:87:12:83:2D:XX:XX:XX:XX:XX;com.example.erikas.mapsdemo
したがって、私自身の間違いは、間違ったSHA1コードと間違ったパッケージでした。しかし、幸運なことに、2日間の頭痛の後、それを理解しました! :D
同じ問題がありました。ログを確認したところ、「サーバーで認証に失敗しました」と言われました。そこで、www.console.developers.google.comを確認し、パッケージ名が間違っていることがわかりました。 (このパッケージ名は自動的に書き込まれました)私はそれを正しく書いたので、すべてうまくいきます。
エラーは、リリース構成をGoogle Developers Consoleに追加したばかりのときにデバッグ構成を実行していたことです。だから、私はこれらの手順に従いました:
次を使用して、デバッグキーストアのsha1を取得します。
keytool -list -v -keystore〜/ .Android/debug.keystore -alias androiddebugkey -storepass Android -keypass Android
Goto https://console.developers.google.com にsha1 + packageを追加します。
API_KEYをAndroidManifest.xmlファイルに追加します。
必要なことは、コード内でデバッグキーを使用することだけです。アプリをアンインストールします。デバッグキーを使用して新しいアプリをインストールします。
私の場合、うまくいったのはコマンドラインからインストールする必要があることです:
adb install /path/to/app/MyApp.apk
デバッグ時に、~/.Android/debug.keystore
に追加のAPIキーを追加する必要がありました
このキーストアは自動的にセットアップされ、パスワードは「Android」ですか?
私は同じ問題に直面しましたが、これには解決策があり、同じパッケージ名で別のGoogleアカウントからデバッグAPIキーを作成しようとしました。バグをクリアする手順:1.異なるgoogleアカウントで同じパッケージ名を持つ不要なapiキーを削除します。 2.この問題を解決するために、単一のアカウントでApiキー生成を維持してください。ありがとうございました。これを試して。
IntelliJでは、.SHA1
キーが正しい、API key
が欠落していない、
Permission
およびManifest
の設定はすべて正しいです。
たぶん、あなたは右クリックをあなたのGoogle-Play-Services-libでやり直さなければならない
私はすべてのことをしました、そして、これは私のためにトリックをします。
私は約1週間この質問にこだわっていました。そこで、実際のデバイスを使い始めました。しかしある日、私はCustonデバッグキーストア(Eclipse、Window-> Preferences-> Android-> Build-> Cusom debug keystore)をデフォルトのキーストアと同じに設定しようとします。 。もちろん、最初にGoogleコンソールでキーを取得しました。
これが役立つことを願っています!
ケースでは、(上記の)何も機能しない場合、指紋の生成に間違ったdebug.keystoreファイルを使用している可能性があります。マシンに複数のdebug.keystoreファイルがある場合は、正しいdebug.keystoreを使用してSHA1フィンガープリントを生成していることを確認してください。
チェックリスト:1. Android READ_GSERVICESのマニフェストで権限を確認します
<uses-permission Android:name = "com.google.Android.providers.gsf.permission.READ_GSERVICES" />
マニフェストに何らかの変更を加えた場合は、アプリケーションデータを消去します。
.Androidフォルダーのdebug.keystoreを確認します。
.Androidフォルダーにあるdebug.keystoreをアプリのdebug.keystoreに置き換えるだけで私の問題は解決しました。