小编Ali*_*lin的帖子

MapView在触摸时添加图钉

我设法让屏幕上显示地图.现在,用户将在地图上移动并按下它.按下一个点后,我需要在按下位置的屏幕上添加一个推针.如果用户决定去另一点,所选择的点压接时,第一个图钉将disapear和新的人会在新的位置绘制

我喜欢这样:

public class LocationSelectionActivity extends MapActivity 
{    
     GeoPoint p;
     List<Overlay> listOfOverlays;
     MapOverlay mapOverlay;

    private MapView mapView;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.locationselection);

        mapView = (MapView) findViewById(R.id.mapView);
        mapView.setSatellite(false);

        final MapController mc = mapView.getController();
        String coordinates[] = {"46.540606", "22.454542"};

        double lat = Double.parseDouble(coordinates[0]);
        double lng = Double.parseDouble(coordinates[1]);

         p = new GeoPoint(
            (int) (lat * 1E6), 
            (int) (lng * 1E6));

        mc.animateTo(p);
        mc.setZoom(10); 


        ZoomControls zoomControls = (ZoomControls) findViewById(R.id.zoomcontrols);
        zoomControls.setOnZoomInClickListener(new View.OnClickListener() {
                public …
Run Code Online (Sandbox Code Playgroud)

android pushpin android-mapview

11
推荐指数
1
解决办法
2万
查看次数

检查用户是否在提示后启用了GPS

干净利落.我开始一项活动并检查手机是否启用了GPS模块.如果未启用,我会通过对话框提示用户,并询问他是否要手动启用它.在是,我激活位置设置.现在用户可以根据需要启用它,但我需要检查他做了什么.

try {
    isGPSEnabled = locationManager
            .isProviderEnabled(LocationManager.GPS_PROVIDER);
} catch (Exception ex) {}
if (isGPSEnabled) {
    locationManager.requestLocationUpdates(
            LocationManager.GPS_PROVIDER, 0, 0, locationListenerGps);
} else {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage(
            "Your GPS module is disabled. Would you like to enable it ?")
            .setCancelable(false)
            .setPositiveButton("Yes",
                    new DialogInterface.OnClickListener() {

                        public void onClick(DialogInterface dialog,
                                int id) {
                            // Sent user to GPS settings screen
                            final ComponentName toLaunch = new ComponentName(
                                    "com.android.settings",
                                    "com.android.settings.SecuritySettings");
                            final Intent intent = new Intent(
                                    Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                            intent.addCategory(Intent.CATEGORY_LAUNCHER);
                            intent.setComponent(toLaunch);
                            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                            startActivityForResult(intent, 1); …
Run Code Online (Sandbox Code Playgroud)

gps android location locationmanager

11
推荐指数
1
解决办法
2万
查看次数

Android片段和方向更改导致:IllegalStateException:在onSaveInstanceState之后无法执行此操作

每当我加载片段的主要活动并且用户启动新活动,切换设备的方向并返回主活动时,我就会收到此错误.

@Override
public void onCreate(Bundle savedInstanceState) {
    setContentView(R.layout.home_layout);
    super.onCreate(savedInstanceState);
    fragmentManager = getSupportFragmentManager();
    fragment = fragmentManager.findFragmentById(R.id.layFragment);

    initialize();
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
    setContentView(R.layout.home_layout);
    initialize();
    super.onConfigurationChanged(newConfig);
}

private void initialize() {
    layStatus = (LinearLayout) findViewById(R.id.layStatus);
    txtStatus = (TextView) findViewById(R.id.txtStatus);
    ....
    handleFragments(lastFragmentId);
}

public void handleFragments(int fragmentId) {
        if (fragment == null) {
            FragmentTransaction ft = fragmentManager.beginTransaction();
            if (fragmentId==someFragmentId){
                ft.replace(R.id.layFragment, new FragmentSomeFragment());
            }
            else
            ....

            ft.commit();
        }
}
Run Code Online (Sandbox Code Playgroud)

在我的android清单中,活动被声明为:

 <activity
        android:name=".HomeActivity"
        android:configChanges="keyboardHidden|orientation" />
<activity
Run Code Online (Sandbox Code Playgroud)

在另一个关于SO的问题中,我发现这可能是由支持库中的一个错误造成的,我添加没有任何运气:

// needed as a workaround for …
Run Code Online (Sandbox Code Playgroud)

android fragment illegalstateexception

11
推荐指数
2
解决办法
1万
查看次数

一个项目中的多个应用程序或Firebase中每个应用程序的一个项目?

我目前有2个Android应用程序,我想使用Firebase添加通知,也许还有广告和分析,因为它是免费且易于实现的.

我看到我有两个选择:

  1. 使用我公司的名称创建一个新项目,并在其中添加2个应用程序
  2. 创建2个项目,每个项目都有应用程序的名称,并在每个项目上添加相关的应用程序.

哪一个是正确的方法,为什么?谢谢.

firebase

11
推荐指数
1
解决办法
6505
查看次数

Android AVD键盘输入在xUbuntu OS上一直无法正常工作

我的xubuntu机器上有一个奇怪的行为,我不知道为什么.

  1. 启动模拟器并在应用程序中使用EditText.
  2. 点击EditText,弹出Android键盘
  3. 点击我的PC硬件键盘上的键,但模拟器上没有输入.
  4. 现在这里是奇怪的部分,点击模拟器设置的3点菜单: 在此输入图像描述

  5. 将打开设置屏幕,例如使用"位置"设置,该设置具有"经度"的输入字段.我关上了屏幕

  6. 现在我的PC键盘的输入在模拟器上工作.

所以,基本上只有在完成这些步骤后,我才可以使用我的键盘在模拟器中输入.如果我回到Android Studio并输入内容,当我返回模拟器时,它不起作用.如何使输入始终有效?

ubuntu android-virtual-device android-emulator android-studio

11
推荐指数
2
解决办法
1904
查看次数

Android应用程序的日/夜主题

我有一个应用程序,我需要实现日/夜主题.不幸的是,通过使用样式没有简单的方法来制作主题,我需要能够更新:布局背景,按钮选择器,文本颜色,文本大小,图像,图标,动画.

从我看到我有2个选项:

  1. 有不同的xml布局文件为night/day,所以像home_day.xml/ home_night.xml.应用程序中有大约30个屏幕,因此最终将有60 xml布局.关于活动/片段onCreate,基于当前小时我可以setContentView.这会添加更多xml文件,但可以避免在活动中添加更多代码

  2. 只有一个日/夜布局和活动的onCreatefindviewById我想要主题的每个项目,并根据当前日/夜更新他的属性.这可能会为许多视图生成大量额外代码,查找视图和应用属性.

我的目标是2.但我愿意接受你的任何建议.那么,你会选择什么?为什么?

android android-theme

10
推荐指数
4
解决办法
2万
查看次数

从Android Room Architecture Component中的多对多结构中获取LiveData

我们来看一个基本的例子

用于存储用户的表

@Entity (tableName="users") 
class UsersEntity(
     @PrimaryKey val id
     var name:String,
      ...
) 
Run Code Online (Sandbox Code Playgroud)

用于存储角色的表

@Entity (tableName="roles") 
class RolesEntity(
     @PrimaryKey val id
     var name:String,
      ...
) 
Run Code Online (Sandbox Code Playgroud)

用于存储用户和角色之间的多对多关系的表

@Entity (tableName="roles") 
class UserRoles(
     @PrimaryKey val id
     var userId:String,
     var roleId:String
) 
Run Code Online (Sandbox Code Playgroud)

我在视图中需要的pojo类

class user(
    var id:String,
    var name:String,
     .... other fields
     var roles: List<Role>
)
Run Code Online (Sandbox Code Playgroud)

在我,我ViewModel怎么能把user结果传递给LiveData已经List<Role>填满?

从一般方面来看,我可以:

  • UserDao.getUserById(id)返回LiveData从用户表,并RoleDao.getRolesForUserId(id)返回LiveData与用户的角色列表.然后在我的片段,我所能做的viewModel.getUserById().observe{}viewModel.getRolesForUserId().observe{}.但这基本上意味着拥有2名观察员,而且我非常有信心这不是可行的方法.
  • 可能其他方式是能够以某种方式在我的存储库或viewmodel中混合它们,以便它返回我需要的东西.我会调查一下MediatorLiveData

android-room android-livedata android-viewmodel android-architecture-components android-jetpack

10
推荐指数
1
解决办法
914
查看次数

从Android中的ArrayList中删除重复的对象

我知道这已经在这里一遍又一遍地讨论,但我尝试过的所有例子都没有为我工作.

我得到了什么

我从Android访问呼叫日志,我得到了所有呼叫的列表.当然,在这里我得到了很多重复.首先我制作一份清单

List<ContactObject> lstContacts = new ArrayList<ContactObject>();
Run Code Online (Sandbox Code Playgroud)

然后我在其中添加对象

While (get some record in call log)
{
    ContactObject contact = new ContactObject();
    contact.SetAllProperties(......)  
    lstContacts.add(contact);  
}

Set<ContactObject> unique = new LinkedHashSet<ContactObject>(lstContacts);
lstContacts = new ArrayList<ContactObject>(unique);
Run Code Online (Sandbox Code Playgroud)

Contact Object类很简单

public class ContactObject {

    public ContactObject() {
        super();
    }

 @Override
 public boolean equals(Object obj) {
     if (!(obj instanceof ContactObject))
        return false;

     return this.lstPhones == ((ContactObject) obj).getLstPhones(); 
 }

 @Override
 public int hashCode() {
     return lstPhones.hashCode();
 }

    private long Id;
    private String name;
    private List<String> lstPhones; …
Run Code Online (Sandbox Code Playgroud)

java android arraylist hashcode treeset

9
推荐指数
2
解决办法
1万
查看次数

获取没有国家/地区代码的电话号码以进行比较

我可以通过来电或短信来获取电话号码.不幸的是,在SMS的情况下,可能有国家代码.所以,基本上我需要获取没有国家代码的普通电话号码,以便将其与联系人中的现有号码进行比较.

android phone-number mobile-country-code

9
推荐指数
1
解决办法
9920
查看次数

用于为Android应用程序生成促销代码的id

我正在考虑在我的应用程序中为有价值的用户提供免费解锁代码,这意味着他们不必购买应用程序即可完全访问它.

调查它有几种方法:

  1. 谷歌播放促销代码:最初这听起来不错,但他们的条款有点限制,例如:

您同意仅向位于您的产品,产品中的应用内商品或相关内容的国家/地区的用户分发促销代码.

如果我想奖励我不销售应用程序的国家/地区的用户,该怎么办?

  1. 我可以为用户的电子邮件生成解锁代码......但这会增加一些隐私问题

  2. 我可以让用户告诉我应用程序中的一些代码,然后为该代码生成解锁代码......我想的可能是ANDROID_ID.不确定哪些安全问题可能会带来ANDROID_ID的读取,例如广告客户ID.另一种方法是在应用程序安装上生成唯一代码并使用它.

  3. 使用类似Firebase数据库的内容,然后在那里存储一堆代码,并检查在应用程序中输入的代码是否在服务器中可用.

我正在等待你对如何实现这个Android的想法.

android reward-system

9
推荐指数
1
解决办法
673
查看次数