小编Don*_*rty的帖子

Android - 处理屏幕方向更改的对话框

我重写了onCreateDialog和onPrepareDialog方法或Dialog类.

我按照Reto Meier的专业Android应用程序开发书第5章中的示例来提取一些XML数据,然后使用对话框显示信息.

我基本上完全遵循了它,但更改了变量以适合我自己的XML模式,如下所示:


@Override
public Dialog onCreateDialog(int id) {
  switch(id) {
    case (SETTINGS_DIALOG) :        
      LayoutInflater li = LayoutInflater.from(this);
      View settingsDetailsView = li.inflate(R.layout.details, null);

      AlertDialog.Builder settingsDialog = new AlertDialog.Builder(this);
      settingsDialog.setTitle("Provisioned Settings");         
      settingsDialog.setView(settingsDetailsView);
return settingsDialog.create();
  }
  return null;
}

@Override
public void onPrepareDialog(int id, Dialog dialog) {
  switch(id) {
    case (SETTINGS_DIALOG) :                  

String afpunText = "  ";

     if(setting.getAddForPublicUserNames() == 1){
      afpunText = "Yes";
     }
     else{
      afpunText = "No";
     }
      String Text = "Login Settings: " + "\n" 
                       + "Password: " + …
Run Code Online (Sandbox Code Playgroud)

android dialog null-pointer screen-orientation

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

是否可以检测文本是否长于div中的一行?

我有一个带有一些文本的div,它最初不会换行并显示省略号但是我想让用户能够点击一个更多的阅读选项,然后展开div来显示整段文本.

但是,我希望能够检测文本是否足够小以适应div而无需从一行扩展它,如果是这样,则隐藏show more选项.

这是一个改进的JS Fiddle的链接,我一直在努力:

http://jsfiddle.net/M2APS/44/

而它的代码:

HTML:

$(document).bind('pageshow', function() {
  $(".text-size").click(function() {
    $(".ui-li > div").toggleClass("less");
    if ($(".text-size").html() == "Read more...") {
      $(".text-size").html("Read less...");
    } else {
      $(".text-size").html("Read more...");
    }
  });
});
Run Code Online (Sandbox Code Playgroud)

CSS:

.less {
  word-wrap: break-word;
  white-space: nowrap;
  text-overflow: ellipsis;
  overflow: hidden;
}

.more {
  white-space: normal;
}

.text-size {
  display: block;
  text-align: right;
  padding-top: 10px;
  color: blue !important;
  cursor: pointer;
}
Run Code Online (Sandbox Code Playgroud)

JS:

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div data-role="page" id="p1">
  <div data-role="content">
    <ul data-role="listview" data-inset="true">
      <li data-role="list-divider">Item Title</li>
      <li>
        <div class="less"> …
Run Code Online (Sandbox Code Playgroud)

html javascript css html5

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

以00:00格式创建递增计时器,以秒为单位?

我想创建一个递增的第二个计时器,如秒表.

所以我希望能够以格式00:01显示秒和分钟递增...

谷歌只提供24小时时钟示例,我想知道是否有人可以让我开始使用我想要做的示例或教程?

编辑:

这是我到目前为止在Android中使用Chronometer的原因

在onCreate()

    secondsT = 0;
    elapsedTimeBeforePause = 0;

    stopWatch.start();
    startTime = SystemClock.elapsedRealtime();
    stopWatch.setBase(elapsedTimeBeforePause);

     stopWatch.setOnChronometerTickListener(new OnChronometerTickListener(){
            @Override
            public void onChronometerTick(Chronometer arg0) {
                //countUp is a long declared earlier
                secondsT = (SystemClock.elapsedRealtime() - arg0.getBase()) / 1000;
                String asText = (secondsT / 60) + ":" + (secondsT % 60); 
                //textGoesHere is a TextView
                ((TextView)findViewById(R.id.time)).setText(asText);
            }
     });
Run Code Online (Sandbox Code Playgroud)

在onDestroy()

@Override
public void onDestroy() {

    inCall = false;
    elapsedTimeBeforePause = SystemClock.elapsedRealtime() - stopWatch.getBase();

    super.onDestroy();
}
Run Code Online (Sandbox Code Playgroud)

上面的编译和运行但TextView永远不会增加,它始终保持为0,任何人都可以看到为什么?

java android timer clock increment

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

使用基本C++获取系统滴答计数?

我本质上想要重建getTickCount()窗口函数,这样我就可以在基本的C++中使用它而不需要任何非标准库甚至STL.(因此它符合随Android NDK提供的库)

我看过了

时钟()

当地时间

时间

但我仍然不确定是否可以使用时间库复制getTickCount窗口函数.

任何人都可以指出我正确的方向,如何做到这一点,甚至可能吗?

我想要做的概述:

我希望能够计算应用程序"执行"某个功能的时间.

因此,例如,我希望能够计算应用程序尝试向服务器注册的时间

我试图从Windows移植它在基于Linux的Android上运行,这里是windows代码:


int TimeoutTimer::GetSpentTime() const
{
if (m_On)
{
    if (m_Freq>1)
    {
        unsigned int now;
        QueryPerformanceCounter((int*)&now);
        return (int)((1000*(now-m_Start))/m_Freq);
    }
    else
    {
        return (GetTickCount()-(int)m_Start);
    }
}
return -1;
}
Run Code Online (Sandbox Code Playgroud)

c++ time porting android-ndk

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

Android - 发布签名版本中的不同行为?

我的Android应用程序有一些非常奇怪的"错误",我从Eclipse运行它运行良好,非常完美.

它包含一个登录屏幕,我可以在Eclipse中运行时访问并进入我的主屏幕.当我按下主页并返回到我的应用程序时,它返回到应用程序所在的最后位置(活动).

然而,当我发布一个构建标志并将其部署在设备上时它具有不同的行为,当我按下主页然后返回应用程序时,通过登录屏幕后总会出现登录屏幕.

两个版本中的代码相同,只有一个是使用默认调试密钥库签名而另一个是使用我自己的版本密钥库签名.

有人遇到过这个吗?真的很混乱!

编辑:更多信息:

应用程序目前的工作方式如下:

启动主要活动,然后调用登录活动,登录活动然后移动到我的应用核心活动.

我还发现它似乎是在安装后第一次运行我有问题,如果我运行应用程序,强制关闭它然后再次运行它然后运行完美没有任何问题.

所以它似乎真的很奇怪?

java android release build

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

Android - 如何正确进行背景线程?

想知道是否有人可以帮助我在Android上进行背景线程.

我有一段代码从设备的麦克风录制,然后播放它通过耳机录制的内容(在1.5上).

我试图在一个线程中运行它,但没有成功让它作为后台线程运行.

目前它运行并锁定活动,以便所有发生的事情是线程正在运行并且UI被锁定或似乎挂起.

这是我尝试这样做的最新方式:

public class LoopProg extends Activity {


boolean isRecording; //currently not used

  public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.main);

   AudioManager audio_service = (AudioManager) getSystemService(Context.AUDIO_SERVICE);

   audio_service.setSpeakerphoneOn(false);
   audio_service.setMode(AudioManager.MODE_IN_CALL);
   audio_service.setRouting(AudioManager.MODE_NORMAL,
   AudioManager.ROUTE_EARPIECE, AudioManager.ROUTE_ALL);

   Record record = new Record();  
   record.run();

 }

  public class Record extends Thread
  {


          static final int bufferSize = 200000;
          final short[] buffer = new short[bufferSize];
          short[] readBuffer = new short[bufferSize];

          public void run() {  
            isRecording = true;
            android.os.Process.setThreadPriority
            (android.os.Process.THREAD_PRIORITY_URGENT_AUDIO);

            int buffersize = AudioRecord.getMinBufferSize(11025,
            AudioFormat.CHANNEL_CONFIGURATION_MONO,
            AudioFormat.ENCODING_PCM_16BIT);

                           AudioRecord arec …
Run Code Online (Sandbox Code Playgroud)

audio multithreading android background

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

Android - 如何扫描接入点并选择最强的信号?

我目前正在尝试在Android中编写一个类来扫描接入点,计算哪个接入点具有最佳信号,然后连接到该接入点.

因此,应用程序将能够在移动中扫描并随时附加到新的接入点.

我有扫描和计算最好的信号工作.

但是当涉及到附加到最佳接入点时,我遇到了麻烦.

似乎enableNetwork(netid,othersTrueFalse)是附加到Access点的唯一方法,但这会导致我的扫描结果出现问题我无法获得信号最强的接入点的id.

这是我的代码:


public void doWifiScan(){

  scanTask = new TimerTask() {
  public void run() {
      handler.post(new Runnable() {
          public void run() {
               sResults = wifiManager.scan(getBaseContext()); 
               if(sResults!=null)
               Log.d("TIMER", "sResults count" + sResults.size());
               ScanResult scan = wifiManager.calculateBestAP(sResults);
               wifiManager.addNewAccessPoint(scan);
           }
       });
    }};

    t.schedule(scanTask, 3000, 30000); 
}
Run Code Online (Sandbox Code Playgroud)
public ScanResult calculateBestAP(List<ScanResult> sResults){

     ScanResult bestSignal = null;
        for (ScanResult result : sResults) {
          if (bestSignal == null
              || WifiManager.compareSignalLevel(bestSignal.level, result.level) < 0)
            bestSignal = result;
        }

        String message = String.format("%s networks found. %s …
Run Code Online (Sandbox Code Playgroud)

android signals wifi wifimanager network-scan

8
推荐指数
1
解决办法
7749
查看次数

Android - sendOrderedBroadcast帮助

我想在我的Android应用程序中使用sendOrderedBroadcast.

我希望能够将Intent从我的一个应用程序发送到另一个应用程序,然后我想从收到Intent的应用程序中获取数据,在这种情况下是布尔值true或false.

这是当前的代码:

    Intent i = new Intent();
    i.setAction(GlobalData.PROPOSE_IN_DOMAIN_ROAM_INTENT);
    i.putExtra("com.testnetworks.QCLEVEL", aProposedTheoreticalQoSLevel);
    sendOrderedBroadcast(i, null, null, null, Activity.RESULT_OK, null, null);
Run Code Online (Sandbox Code Playgroud)

这是实现我想要的正确方法吗?

如果是这样,我将什么用作resultReceiver*参数?(第3个参数)

然后我如何从广播中收回数据?

我做了一个快速的谷歌,没有提出任何例子,任何帮助或例子非常感谢.

更新的代码:


sendOrderedBroadcast(i, null, domainBroadcast, null, Activity.RESULT_OK, null, null);
Run Code Online (Sandbox Code Playgroud)
class DomainBroadcast extends BroadcastReceiver{

    @Override
    public void onReceive(Context arg0, Intent intent) {
        String action = intent.getAction();

        if(GlobalData.PROPOSE_IN_DOMAIN_ROAM_INTENT.equals(action)){
            Log.d("BROADCAST", "Returning broadcast");

            Bundle b = intent.getExtras(); 
            Log.d("BROADCAST", "Returning broadcast " + 
                    b.getInt("com.testnetworks.INT_TEST"));
        }      
    }
Run Code Online (Sandbox Code Playgroud)
    @Override
    public void onReceive(Context context, Intent intent) {
            String action = intent.getAction(); 

            if(GlobalData.PROPOSE_IN_DOMAIN_ROAM_INTENT.equals(action)){

                Bundle b = …
Run Code Online (Sandbox Code Playgroud)

android broadcast broadcastreceiver android-intent

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

Android - 如何创建活动的多个实例?

我想知道是否可以在Android中创建单个Activity的多个实例?

我目前通过使用以下代码启动我自己的inCall屏幕进行Voip测试:


     public void initInCallScreen(String pName, String phoneNumber, int contactID, boolean 
        callDirection, int lineID){

    //starts in callScreen dialog
    final Intent myIntent = new Intent(context, CallDialogActivity.class);
    myIntent.putExtra("NAME", pName);
    myIntent.putExtra("NUMBER", phoneNumber);
    myIntent.putExtra("ID", contactID);
    myIntent.putExtra("CALLTYPE", callDirection); //True = Incoming, False = Outgoing
    myIntent.putExtra("LINEID", lineID);
    myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(myIntent);
Run Code Online (Sandbox Code Playgroud)

这允许我开始活动正常.

但是,当我调用它一秒时,它只返回已创建的Activity,而不是创建一个新的Activity并将其放在堆栈上.

我希望能够多次创建活动,以便我在堆栈上有两个或三个活动,用户可以在它们之间切换,使用Home,Back按钮等...

这是可能的,如果是这样,我做错了什么?

android multiple-instances android-activity

8
推荐指数
1
解决办法
7091
查看次数

如何使用Android密钥库提供商存储密钥

我正在尝试使用Android 4.3中可用的Android密钥库提供程序来安全地保存私钥,然后使用此私钥来加密和解码数据.

我认为到目前为止我已经实现了正确的方法和代码,但是我目前面临着一个我无法弄清楚的奇怪问题.

我有一个名为KeyStorage的类,我用它来创建密钥对,加载KeyStore并检索私钥,这个类的代码如下:

public class KeyStorage {

public static final String ANDROID_KEYSTORE = "AndroidKeyStore";
private KeyStore keyStore;

public void loadKeyStore() {
    try {
        keyStore = KeyStore.getInstance(ANDROID_KEYSTORE);
        keyStore.load(null);
        Enumeration<String> aliases = keyStore.aliases();
        while(aliases.hasMoreElements())
            Log.e("E", "Aliases = " + aliases.nextElement());
    } catch (Exception e) {
        // TODO: Handle this appropriately in your app
        e.printStackTrace();
    }
}

public void generateNewKeyPair(String alias, Context context)
        throws Exception {

    Calendar start = Calendar.getInstance();
    Calendar end = Calendar.getInstance();
    // expires 1 year from today
    end.add(1, Calendar.YEAR); …
Run Code Online (Sandbox Code Playgroud)

encryption android android-keystore private-key

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